Нередко возникает изменить уже имеющуюся таблицу, в частности, добавить или удалить столбцы, изменить тип столбцов и т.д.. То есть потребуется изменить определение таблицы. Для этого применяется выражение ALTER TABLE, которое имеет следующий формальный синтаксис:
ALTER TABLE название_таблицы { ADD название_столбца тип_данных_столбца [ограничения_столбца] | DROP COLUMN название_столбца | ALTER COLUMN название_столбца параметры_столбца | ADD [CONSTRAINT] определение_ограничения | DROP [CONSTRAINT] имя_ограничения}
Рассмотрим некоторые возможности по изменению таблицы.
Добавим в таблицу Customers новый столбец Phone:
ALTER TABLE Customers ADD Phone CHARACTER VARYING(20) NULL;
Здесь столбец Phone имеет тип CHARACTER VARYING(20)
, и для него определен атрибут NULL
, то есть
столбец допускает отсутствие значения. Но что если нам надо добавить столбец, который не должен принимать значения NULL? Если в таблице есть
данные, то следующая команда не будет выполнена:
ALTER TABLE Customers ADD Address CHARACTER VARYING(30) NOT NULL;
Поэтому в данном случае решение состоит в установке значения по умолчанию через атрибут DEFAULT
:
ALTER TABLE Customers ADD Address CHARACTER VARYING(30) NOT NULL DEFAULT 'Неизвестно';
Удалим столбец Address из таблицы Customers:
ALTER TABLE Customers DROP COLUMN Address;
Для изменения типа применяется ключевое слово TYPE. Изменим в таблице Customers тип данных у столбца FirstName на VARCHAR(50)
(он же VARYING CHARACTER(50)
):
ALTER TABLE Customers ALTER COLUMN FirstName TYPE VARCHAR(50);
Для добавления ограничения применяется оператор SET, после которого указывается ограничение.
Например, установим для столбца FirstName ограничение NOT NULL
:
ALTER TABLE Customers ALTER COLUMN FirstName SET NOT NULL;
Для удаления ограничения применяется оператор DROP, после которого указывается ограничение. Например, удалим выше установленное ограничение:
ALTER TABLE Customers ALTER COLUMN FirstName DROP NOT NULL;
Добавление ограничения CHECK:
ALTER TABLE Customers ADD CHECK (Age > 0);
Добавление первичного ключа PRIMARY KEY
:
ALTER TABLE Customers ADD PRIMARY KEY (Id);
В данном случае предполагается, что в таблице уже есть столбец Id, который не имеет ограничения PRIMARY KEY. А с помощью вышеуказанного скрипта устанавливается ограничение PRIMARY KEY.
Добавление ограничение UNIQUE
- определим для столбца Email уникальные значения:
ALTER TABLE Customers ADD UNIQUE (Email);
При добавлении ограничения каждому из них дается определенное имя. Например, выше добавленное ограничение для CHECK будет называться
customers_age_check
. Имена ограничений можно посмотреть в таблице через pgAdmin.
Также мы можем явным образом назначить ограничению при добавлении имя с помощью оператора CONSTRAINT.
ALTER TABLE Customers ADD CONSTRAINT phone_unique UNIQUE (Phone);
В данном случае ограничение будет называться "phone_unique".
Чтобы удалить ограничение, надо знать его имя, которое указывается после выражения DROP CONSTRAINT
. Например, удалим выше добавленное ограничение:
ALTER TABLE Customers DROP CONSTRAINT phone_unique;
Переименуем столбец Address в City:
ALTER TABLE Customers RENAME COLUMN Address TO City;
Переименуем таблицу Customers в Users:
ALTER TABLE Customers RENAME TO Users;