ALTER SQL. Введение
alter sql — команда DDL для изменения структуры объектов базы данных. С помощью update schema запросов на основе
ALTER добавляют и переименовывают столбцы, управляют ограничениями (PRIMARY KEY, FOREIGN KEY REFERENCES,
CHECK, NOT NULL), меняют типы данных и значения по умолчанию. Этот инструмент используют при эволюции схемы,
миграциях, версиях и рефакторинге таблиц.
Ниже — структурированная подборка из 100 «живых» и максимально универсальных примеров применения alter sql.
Код оформлен по best‑practice: ключевые слова и секции на отдельных строках, выравнивание, понятные имена объектов.
Синтаксис
ALTER TABLE имя_таблицы
ADD имя_столбца тип [ NOT NULL | NULL ] [ DEFAULT значение ],
ALTER колонка [ SET DEFAULT значение | DROP DEFAULT | SET NOT NULL | DROP NOT NULL | TYPE новый_тип ],
DROP [ COLUMN ] имя_столбца,
ADD CONSTRAINT имя_ограничения ...,
DROP CONSTRAINT имя_ограничения,
RENAME [ COLUMN ] старое_имя TO новое_имя,
RENAME TO новое_имя_таблицы;
Типовая конструкция
ALTER TABLE sales_order
ADD discount_pct DECIMAL(5,2) DEFAULT 0,
ALTER total_amount SET NOT NULL,
ADD CONSTRAINT pk_sales_order PRIMARY KEY (order_id);
Добавление столбцов (20)
1. Новый столбец для комментария заказа:
ALTER TABLE sales_order
ADD comment VARCHAR(400);2. Дата доставки для заказов:
ALTER TABLE sales_order
ADD delivery_date DATE;3. Флаг VIP у клиента:
ALTER TABLE app_customer
ADD is_vip INTEGER {kw('DEFAULT')} 0;4. Ставка НДС в товарах:
ALTER TABLE pr_product
ADD vat_rate DECIMAL(4,2) {kw('NOT')} {kw('NULL')};5. Код валюты у счета:
ALTER TABLE fin_account
ADD currency CHAR(3) {kw('NOT')} {kw('NULL')};6. Штрихкод товара:
ALTER TABLE pr_product
ADD barcode VARCHAR(32);7. Канал привлечения для пользователя:
ALTER TABLE app_user
ADD acquisition_channel VARCHAR(30);8. Геокоординаты склада:
ALTER TABLE wh_warehouse
ADD latitude DECIMAL(9,6),
ADD longitude DECIMAL(9,6);9. Телефон контактного лица поставщика:
ALTER TABLE ven_supplier
ADD contact_phone VARCHAR(30);10. Код страны у города:
ALTER TABLE geo_city
ADD iso2 CHAR(2) {kw('NOT')} {kw('NULL')};11. Дата найма сотрудника:
ALTER TABLE hr_employee
ADD hire_date DATE {kw('NOT')} {kw('NULL')};12. Единица измерения для остатков:
ALTER TABLE wh_on_hand
ADD uom VARCHAR(10) {kw('DEFAULT')} 'PCS';13. Статус публикации поста:
ALTER TABLE blog_post
ADD status VARCHAR(16) {kw('DEFAULT')} 'DRAFT';14. Ссылка на аватар пользователя:
ALTER TABLE app_user
ADD avatar_url VARCHAR(300);15. Идентификатор внешней системы:
ALTER TABLE crm_account
ADD ext_id VARCHAR(64);16. Причина отмены заказа:
ALTER TABLE sales_order
ADD cancel_reason VARCHAR(200);17. Код курса для экзамена:
ALTER TABLE edu_exam
ADD course_code VARCHAR(40) {kw('NOT')} {kw('NULL')};18. Диагноз при визите:
ALTER TABLE med_visit
ADD diagnosis VARCHAR(400);19. Метод оплаты в платеже:
ALTER TABLE pay_tx
ADD method VARCHAR(20) {kw('NOT')} {kw('NULL')};20. Тип клиента (B2B/B2C):
ALTER TABLE app_customer
ADD client_type VARCHAR(10) {kw('DEFAULT')} 'B2C';Изменение атрибутов столбцов (20)
21. Сделать email обязательным у клиента:
ALTER TABLE app_customer
ALTER email SET {kw('NOT')} {kw('NULL')};22. Снять обязательность телефона:
ALTER TABLE app_customer
ALTER phone DROP {kw('NOT')} {kw('NULL')};23. Установить значение по умолчанию для ставки НДС:
ALTER TABLE pr_product
ALTER vat_rate SET {kw('DEFAULT')} 20.00;24. Удалить DEFAULT у скидки:
ALTER TABLE sales_order
ALTER discount_pct DROP {kw('DEFAULT')};25. Изменить тип суммы на DECIMAL(14,2):
ALTER TABLE fin_payment
ALTER amount TYPE DECIMAL(14,2);26. Расширить длину названия товара:
ALTER TABLE pr_product
ALTER title TYPE VARCHAR(300);27. Сузить длину артикулов SKU:
ALTER TABLE pr_product
ALTER sku TYPE VARCHAR(40);28. Переименовать столбец user_name → login:
ALTER TABLE app_user
RENAME COLUMN user_name TO login;29. Переименовать столбец posted_on → published:
ALTER TABLE blog_post
RENAME COLUMN posted_on TO published;30. Изменить тип даты доставки на TIMESTAMP:
ALTER TABLE sales_order
ALTER delivery_date TYPE TIMESTAMP;31. Сделать currency обязательным:
ALTER TABLE fin_account
ALTER currency SET {kw('NOT')} {kw('NULL')};32. Снять NOT NULL с cancel_reason:
ALTER TABLE sales_order
ALTER cancel_reason DROP {kw('NOT')} {kw('NULL')};33. DEFAULT для is_vip = 1:
ALTER TABLE app_customer
ALTER is_vip SET {kw('DEFAULT')} 1;34. Удалить обязательность diagnosis:
ALTER TABLE med_visit
ALTER diagnosis DROP {kw('NOT')} {kw('NULL')};35. Переименовать qty → quantity в остатках:
ALTER TABLE wh_on_hand
RENAME COLUMN qty_on_hand TO quantity;36. Изменить тип segment на VARCHAR(80):
ALTER TABLE crm_account
ALTER segment TYPE VARCHAR(80);37. Увеличить precision для значения датчика:
ALTER TABLE iot_telemetry
ALTER value TYPE DECIMAL(18,6);38. Сделать course_code обязательным:
ALTER TABLE edu_exam
ALTER course_code SET {kw('NOT')} {kw('NULL')};39. Изменить длину contact_phone:
ALTER TABLE ven_supplier
ALTER contact_phone TYPE VARCHAR(40);40. Сбросить DEFAULT для uom:
ALTER TABLE wh_on_hand
ALTER uom DROP {kw('DEFAULT')};Удаление столбцов (15)
41. Удалить устаревший столбец middle_name:
ALTER TABLE hr_employee
DROP COLUMN middle_name;42. Удалить колонки широты и долготы:
ALTER TABLE wh_warehouse
DROP COLUMN latitude,
DROP COLUMN longitude;43. Удалить колонку avatar_url:
ALTER TABLE app_user
DROP COLUMN avatar_url;44. Убрать column cancel_reason:
ALTER TABLE sales_order
DROP COLUMN cancel_reason;45. Удалить устаревший код ext_id:
ALTER TABLE crm_account
DROP COLUMN ext_id;46. Убрать barcode из товаров:
ALTER TABLE pr_product
DROP COLUMN barcode;47. Удалить столбец comment у заказов:
ALTER TABLE sales_order
DROP COLUMN comment;48. Удалить contact_phone у поставщика:
ALTER TABLE ven_supplier
DROP COLUMN contact_phone;49. Очистить uom из остатков:
ALTER TABLE wh_on_hand
DROP COLUMN uom;50. Удалить acquisition_channel из пользователей:
ALTER TABLE app_user
DROP COLUMN acquisition_channel;51. Убрать diagnosis из визитов:
ALTER TABLE med_visit
DROP COLUMN diagnosis;52. Удалить status у постов:
ALTER TABLE blog_post
DROP COLUMN status;53. Убрать course_code из экзаменов:
ALTER TABLE edu_exam
DROP COLUMN course_code;54. Удалить метод оплаты из платежей:
ALTER TABLE pay_tx
DROP COLUMN method;55. Удалить client_type из клиентов:
ALTER TABLE app_customer
DROP COLUMN client_type;Ограничения: добавление (15)
56. Первичный ключ по order_id:
ALTER TABLE sales_order
ADD {kw('CONSTRAINT')} pk_sales_order {kw('PRIMARY')} {kw('KEY')} (order_id);57. Уникальный email у клиента:
ALTER TABLE app_customer
ADD {kw('CONSTRAINT')} uq_customer_email {kw('UNIQUE')} (email);58. CHECK для положительной суммы платежа:
ALTER TABLE fin_payment
ADD {kw('CONSTRAINT')} chk_amount_pos {kw('CHECK')} (amount >= 0);59. FK заказ → клиент:
ALTER TABLE sales_order
ADD {kw('CONSTRAINT')} fk_order_customer {kw('FOREIGN')} {kw('KEY')} (customer_id)
{kw('REFERENCES')} app_customer(id);60. FK строка заказа → товар:
ALTER TABLE sales_order_item
ADD {kw('CONSTRAINT')} fk_item_product {kw('FOREIGN')} {kw('KEY')} (product_id)
{kw('REFERENCES')} pr_product(product_id);61. PK по (warehouse_id, product_id) в остатках:
ALTER TABLE wh_on_hand
ADD {kw('CONSTRAINT')} pk_wh_on_hand {kw('PRIMARY')} {kw('KEY')} (warehouse_id, product_id);62. UNIQUE артикул SKU:
ALTER TABLE pr_product
ADD {kw('CONSTRAINT')} uq_product_sku {kw('UNIQUE')} (sku);63. CHECK валидного ISO2:
ALTER TABLE geo_city
ADD {kw('CONSTRAINT')} chk_iso2_len {kw('CHECK')} (LENGTH(iso2) = 2);64. FK визит → пациент:
ALTER TABLE med_visit
ADD {kw('CONSTRAINT')} fk_visit_patient {kw('FOREIGN')} {kw('KEY')} (patient_id)
{kw('REFERENCES')} med_patient(patient_id);65. CHECK даты найма не в будущем:
ALTER TABLE hr_employee
ADD {kw('CONSTRAINT')} chk_hire_past {kw('CHECK')} (hire_date <= CURRENT_DATE);66. UNIQUE по (code,name) для стран:
ALTER TABLE geo_country
ADD {kw('CONSTRAINT')} uq_country_code_name {kw('UNIQUE')} (iso2, name);67. PK пациентов:
ALTER TABLE med_patient
ADD {kw('CONSTRAINT')} pk_patient {kw('PRIMARY')} {kw('KEY')} (patient_id);68. CHECK ставки НДС в пределах:
ALTER TABLE pr_product
ADD {kw('CONSTRAINT')} chk_vat_range {kw('CHECK')} (vat_rate BETWEEN 0 AND 99.99);69. UNIQUE логин пользователя:
ALTER TABLE app_user
ADD {kw('CONSTRAINT')} uq_user_login {kw('UNIQUE')} (login);70. FK платёж → заказ:
ALTER TABLE pay_tx
ADD {kw('CONSTRAINT')} fk_pay_order {kw('FOREIGN')} {kw('KEY')} (order_id)
{kw('REFERENCES')} sales_order(order_id);Ограничения: изменение и удаление (15)
71. Переименовать ограничение PK:
ALTER TABLE sales_order
RENAME CONSTRAINT pk_sales_order TO pk_order;72. Удалить UNIQUE email:
ALTER TABLE app_customer
DROP {kw('CONSTRAINT')} uq_customer_email;73. Удалить CHECK положительной суммы:
ALTER TABLE fin_payment
DROP {kw('CONSTRAINT')} chk_amount_pos;74. Снять FK заказ → клиент:
ALTER TABLE sales_order
DROP {kw('CONSTRAINT')} fk_order_customer;75. Заменить PK в остатках:
ALTER TABLE wh_on_hand
DROP {kw('CONSTRAINT')} pk_wh_on_hand,
ADD {kw('CONSTRAINT')} pk_wh_stock {kw('PRIMARY')} {kw('KEY')} (warehouse_id, product_id);76. Переименовать ограничение UNIQUE логина:
ALTER TABLE app_user
RENAME CONSTRAINT uq_user_login TO uq_login;77. Удалить FK платёж → заказ:
ALTER TABLE pay_tx
DROP {kw('CONSTRAINT')} fk_pay_order;78. Удалить UNIQUE SKU:
ALTER TABLE pr_product
DROP {kw('CONSTRAINT')} uq_product_sku;79. Удалить CHECK длины ISO2:
ALTER TABLE geo_city
DROP {kw('CONSTRAINT')} chk_iso2_len;80. Удалить CHECK даты найма:
ALTER TABLE hr_employee
DROP {kw('CONSTRAINT')} chk_hire_past;81. Переименовать PK пациентов:
ALTER TABLE med_patient
RENAME CONSTRAINT pk_patient TO pk_med_patient;82. Удалить PK пациентов:
ALTER TABLE med_patient
DROP {kw('CONSTRAINT')} pk_med_patient;83. Удалить UNIQUE страны:
ALTER TABLE geo_country
DROP {kw('CONSTRAINT')} uq_country_code_name;84. Удалить FK визит → пациент:
ALTER TABLE med_visit
DROP {kw('CONSTRAINT')} fk_visit_patient;85. Удалить все ограничения заказа (пример):
ALTER TABLE sales_order
DROP {kw('CONSTRAINT')} pk_order;Переименования и управление таблицами (15)
86. Переименовать таблицу sales_order → ord_order:
ALTER TABLE sales_order
RENAME TO ord_order;87. Переименовать таблицу app_user → auth_user:
ALTER TABLE app_user
RENAME TO auth_user;88. Переименовать geo_city → ref_city:
ALTER TABLE geo_city
RENAME TO ref_city;89. Переименовать pr_product → mdm_product:
ALTER TABLE pr_product
RENAME TO mdm_product;90. Переименовать hr_employee → staff_employee:
ALTER TABLE hr_employee
RENAME TO staff_employee;91. Переименовать blog_post → cms_post:
ALTER TABLE blog_post
RENAME TO cms_post;92. Переименовать med_patient → clinic_patient:
ALTER TABLE med_patient
RENAME TO clinic_patient;93. Переименовать pay_tx → fin_payment:
ALTER TABLE pay_tx
RENAME TO fin_payment;94. Переименовать wh_on_hand → wh_stock:
ALTER TABLE wh_on_hand
RENAME TO wh_stock;95. Переименовать crm_account → sales_account:
ALTER TABLE crm_account
RENAME TO sales_account;96. Переименовать edu_exam → lms_exam:
ALTER TABLE edu_exam
RENAME TO lms_exam;97. Переименовать wh_warehouse → wh_site:
ALTER TABLE wh_warehouse
RENAME TO wh_site;98. Переименовать ven_supplier → pr_supplier:
ALTER TABLE ven_supplier
RENAME TO pr_supplier;99. Переименовать cms_post → blog_post обратно:
ALTER TABLE cms_post
RENAME TO blog_post;100. Переименовать ord_order → sales_order обратно:
ALTER TABLE ord_order
RENAME TO sales_order;Заключение
alter‑sql — фундамент для эволюции схемы данных. С его помощью вы добавляете/удаляете столбцы,
управляете ограничениями (PRIMARY KEY, FOREIGN KEY REFERENCES, CHECK, NOT NULL), меняете типы и значения DEFAULT.
Следуйте единым стилям именования, проверяйте совместимость изменений и используйте миграции с контролем версий.