ALTER в MySQL — 100 жизненных приёмов и кейсов

100 примеров использования MySQL ALTER: столбцы, ключи, индексы, ограничения, кодировки, партиции.

🟢 ALTER в MySQL. Введение

ALTER в MySQL — оператор изменения структуры объектов. Используется для добавления и удаления столбцов, изменения типов и ограничений, управления индексами и ключами, смены движка таблицы, кодировок, а также для работы с партициями и другими свойствами. Это универсальный инструмент администрирования схемы базы данных.

Ниже приведены синтаксис и 100 уникальных практических примеров из разных сфер.

Синтаксис

ALTER TABLE tbl ADD col INT;
ALTER TABLE tbl DROP COLUMN col;
ALTER TABLE tbl MODIFY col VARCHAR(255) NOT NULL;
ALTER TABLE tbl ADD CONSTRAINT fk FOREIGN KEY(col) REFERENCES other(id);
ALTER TABLE tbl ADD INDEX idx_col (col);

Типовая конструкция

ALTER TABLE users
  ADD phone VARCHAR(20) AFTER email,
  ADD INDEX ix_users_phone (phone);

100 примеров

1. Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

2. Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

3. Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

4. Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

5. Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

6. Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

7. Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

8. Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

9. Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

10. Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

11. Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

12. Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

13. Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

14. Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

15. Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

16. Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

17. Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

18. Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

19. Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

20. Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

21. Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

22. Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

23. Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

24. Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

25. Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

26. Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

27. Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

28. Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

29. Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

30. Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

31. Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

31. Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

32. Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

33. Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

34. Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

35. Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

36. Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

37. Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

38. Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

39. Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

40. Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Добавление DEFAULT значения в таблицу orders

ALTER TABLE orders
  ALTER COLUMN status SET DEFAULT 'active';

Удаление UNIQUE индекса из payments

ALTER TABLE payments
  DROP INDEX ux_payments_name;

Переименование таблицы products

ALTER TABLE products
  RENAME TO products_archived;

Смена движка у таблицы logs

ALTER TABLE logs
  ENGINE=InnoDB;

Добавление CHECK ограничения для sessions

ALTER TABLE sessions
  ADD CONSTRAINT chk_sessions_positive CHECK (amount>=0);

Смена кодировки таблицы profiles

ALTER TABLE profiles
  CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Добавление AUTO_INCREMENT столбца в employees

ALTER TABLE employees
  ADD id BIGINT PRIMARY KEY AUTO_INCREMENT;

Разделение таблицы subscriptions на партиции

ALTER TABLE subscriptions
  PARTITION BY HASH(id) PARTITIONS 8;

Удаление FOREIGN KEY из devices

ALTER TABLE devices
  DROP FOREIGN KEY fk_devices_user;

Добавление нового столбца с датой обновления в users

ALTER TABLE users
  ADD updated_at DATETIME DEFAULT CURRENT_TIMESTAMP;

Заключение

ALTER в MySQL — основной оператор изменения структуры таблиц. С его помощью можно добавлять и удалять столбцы, управлять ключами и индексами, менять кодировки, движки и партиции. 100 примеров выше показывают практическое применение ALTER в администрировании и разработке.

Дополнительно см. официальную документацию MySQL.

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