Изменение таблиц и столбцов

Если таблица уже была ранее создана, и ее необходимо изменить, то для этого применяется команда ALTER TABLE. Ее сокращенный формальный синтаксис:


ALTER TABLE названиетаблицы { ADD названиестолбца типданныхстолбца [атрибутыстолбца] | DROP COLUMN названиестолбца |
MODIFY COLUMN названиестолбца типданныхстолбца [атрибутыстолбца] |
ALTER COLUMN названиестолбца SET DEFAULT значениепоумолчанию | ADD [CONSTRAINT] определениеограничения |
DROP [CONSTRAINT] имя_ограничения}
Вообще данная команда поддерживает гораздо больше опций и возможностей. Все их можно посмотреть в документации. Рассмотрим лишь основные сценарии, с которыми мы можем столкнуться.

Добавление нового столбца
Добавим в таблицу Customers новый столбец Address:


ALTER TABLE Customers
ADD Address VARCHAR(50) NULL;
В данном случае столбец Address имеет тип VARCHAR и для него определен атрибут NULL.

Удаление столбца
Удалим столбец Address из таблицы Customers:


ALTER TABLE Customers
DROP COLUMN Address;


Изменение значения по умолчанию
Установим в таблице Customers для столбца Age значение по умолчанию 22:


ALTER TABLE Customers
ALTER COLUMN Age SET DEFAULT 22;


Изменение типа столбца
Изменим в таблице Customers тип данных у столбца FirstName на CHAR(100) и установим для него атрибут NULL:


ALTER TABLE Customers
MODIFY COLUMN FirstName CHAR(100) NULL;


Добавление и удаление внешнего ключа
Пусть изначально в базе данных будут добавлены две таблицы, никак не связанные:


CREATE TABLE Customers
(
Id INT PRIMARY KEY AUTO_INCREMENT,
Age INT,
FirstName VARCHAR(20) NOT NULL,
LastName VARCHAR(20) NOT NULL
);
CREATE TABLE Orders
(
Id INT PRIMARY KEY AUTO_INCREMENT,
CustomerId INT,
CreatedAt Date
);
Добавим ограничение внешнего ключа к столбцу CustomerId таблицы Orders:


ALTER TABLE Orders
ADD FOREIGN KEY(CustomerId) REFERENCES Customers(Id);
При добавлении ограничений мы можем указать для них имя, используя оператор CONSTRAINT, после которого указывается имя ограничения:


ALTER TABLE Orders
ADD CONSTRAINT orders_customers_fk
FOREIGN KEY(CustomerId) REFERENCES Customers(Id);
В данном случае ограничение внешнего ключа называется orders_customers_fk. Затем по этому имени мы можем удалить ограничение:


ALTER TABLE Orders
DROP FOREIGN KEY orders_customers_fk;


Добавление и удаление первичного ключа
Добавим в таблицу Products первичный ключ:


CREATE TABLE Products
(
Id INT,
Model VARCHAR(20)
);

ALTER TABLE Products
ADD PRIMARY KEY (Id);
Теперь удалим первичный ключ:


ALTER TABLE Products
DROP PRIMARY KEY;