ALTER SQL — 100 универсальных примеров для любых реализаций SQL

🟢 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.
Следуйте единым стилям именования, проверяйте совместимость изменений и используйте миграции с контролем версий.

Понравилась статья? Поделиться с друзьями: