ALTER TABLE - изменение таблицы в SQL и работа со столбцами (add delete rename column)

ALTER TABLE — изменение таблицы в SQL

Рассказываем о команде ALTER TABLE и учим вносить с ее помощью изменения в таблицы и столбцы.

Введение

ALTER TABLE — один из самых незаменимых инструментов в работе с базами данных SQL. В этой статье мы рассмотрим SQL оператор ALTER TABLE и его применение. Узнаем, как добавить или удалить поля с помощью этого инструмента, и рассмотрим различные примеры его использования. В данной статье мы не будем рассматривать MS SQL и остановимся на синтаксисе наиболее популярной версии — MySQL.

Синтаксис оператора ALTER TABLE в SQL

Синтаксис оператора ALTER TABLE выглядит следующим образом:


    ALTER TABLE название_таблицы [WITH CHECK | WITH NOCHECK]
{ ADD название_столбца тип_данных_столбца [атрибуты_столбца] |
  DROP COLUMN название_столбца |
  ALTER COLUMN название_столбца тип_данных_столбца [NULL|NOT NULL] |
  ADD [CONSTRAINT] определение_ограничения |
  DROP [CONSTRAINT] имя_ограничения}


Из этой записи мы видим, что сценариев применения данной команды достаточно много. Давайте рассмотрим их. В качестве примера мы будем использовать базу данных slcbookshelf, которую мы создавали в статье о первичных и внешних SQL ключах.


    use slcbookshelf;

Добавление столбца в таблицу (ADD COLUMN)

Сейчас наша таблица выглядит следующим образом:


    mysql> DESC books;
+---------------+--------------+------+-----+---------+-------+
| Field		 | Type		 | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+-------+
| book_id  	 | int 		 | NO  |     | NULL    |  	|
| book_name     | varchar(255) | NO   |     | NULL    |  	|
| book_category | varchar(255) | YES  |     | NULL    |  	|
+---------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


Давайте добавим в нашу таблицу новый столбец, в котором будет отображаться автор каждой книги:


    ALTER TABLE books
ADD author NVARCHAR(50) NOT NULL;

Данным запросом мы создали в нашей таблице новый столбец authors с типом NVARCHAR и длиной в 50 символов, который не может принимать пустое значение. Если мы не знаем автора произведения, тогда наша команда будет иметь такой вид:


    ALTER TABLE books
ADD author NVARCHAR(50) NOT NULL DEFAULT 'Неизвестен';


Теперь для существующих данных, для которых не заполнен столбец author, значение по умолчанию будет «Неизвестен».

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

Переименование столбца (RENAME)

С помощью ALTER TABLE можно переименовать существующий столбец. Для этого выполните команду:


    ALTER TABLE books
RENAME COLUMN author TO authors;

Переименование таблицы (RENAME)

При помощи ALTER TABLE можно переименовать таблицу. Выполняем запрос:


    ALTER TABLE books
RENAME TO books_selectel;

Удаление столбца (DROP)

Чтобы удалить столбец из таблицы с помощью ALTER TABLE, требуется выполнить следующий запрос:


    ALTER TABLE books
DROP COLUMN authors;

Изменение столбца (ALTER COLUMN)

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


    ALTER TABLE books
ALTER COLUMN book_category VARCHAR(200);

В данном примере мы изменили максимальное количество символов, которое может использоваться в полях столбца book_category с 255 до 200.

Также с помощью ALTER TABLE можно сделать действие сразу с несколькими столбцами. Чтобы изменить сразу несколько столбцов, вам потребуется использовать эту команду:


    ALTER TABLE books
MODIFY book_category VARCHAR(200),
MODIFY book_name VARCHAR(200),
...
;

Таким запросом мы изменили сразу два столбца: book_category и book_name.

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

При помощи ALTER TABLE можно изменить тип столбца в таблице SQL. Изменение типа существующего столбца осуществляется при помощи команды:


    ALTER TABLE books
ALTER COLUMN book_category NVARCHAR(200);


Выполнив эту команду, мы изменили тип book_category на NVARCHAR(200).

Добавление первичного и внешнего ключей при помощи ALTER TABLE

Вы можете определить существующий столбец в таблице в качестве первичного ключа с помощью команды ALTER TABLE. Запрос, добавляющий в таблицу первичный ключ, будет выглядеть следующим образом:


    ALTER TABLE books
ADD PRIMARY KEY (book_id);

Аналогично при помощи ALTER TABLE можно добавить внешний ключ таблицы. Чтобы создать внешний ключ для таблицы MySQL выполните команду:


    ALTER TABLE books ADD FOREIGN KEY (author_id) REFERENCES authors(author_id);

В результате выполнения этой команды поле author_id в таблице books будет внешним ключом для аналогичного поля в таблице authors.

Работа с ограничениями

Ограничения — специальные правила, которые применяются к таблице, чтобы ограничить типы данных в таблице. Ограничения очень важны, так как их правильное применение помогает обеспечить целостность данных в таблицах и наладить стабильную работу базы. Давайте рассмотрим одно из таких ограничений — ограничение CHECK. Применяя ограничения CHECK к столбцу таблицы, мы создаем правило, по которому при добавлении данных СУБД будет автоматически проверять их на соответствии заданным правилам. 

Создание ограничения

Например, если нам необходимо, чтобы все клиенты в базе данных Customers имели возраст больше 21 года, мы можем установить следующее ограничение:


    ALTER TABLE Customers
ADD CHECK (Age > 21);

При применении такого ограничения стоит учитывать, что если в столбце уже существуют данные, не соответствующие ограничению, то команда будет выполнена с ошибкой. Чтобы избежать подобного поведения, вы можете добавить ограничение со значением WITH NOCHECK. Таким образом, текущие значения столбца не вызовут ошибок при выполнении запроса при несоответствии ограничению:


    ALTER TABLE Customers WITH NOCHECK
ADD CHECK (Age > 21);

Добавление ограничений с именами

Так как ограничений в таблицах может быть много, добавление имен к ограничениям может в значительной мере упростить будущую работу с таблицей. Создать имя для ограничения можно при помощи оператора CONSTRAINT:


    ALTER TABLE Customers
ADD CONSTRAINT Check_Age_Greater_Than_Twenty_One CHECK (Age > 21);

Удаление ограничений

ALTER TABLE можно пользоваться и для удаления ограничений. Для удаления существующих ограничений необходимо выполнить следующую команду:


    ALTER TABLE Customers
DROP Check_Age_Greater_Than_Twenty_One;

После выполнения этой команды ограничение перестанет применяться при добавлении новых данных в столбец.

Заключение

В данной статье мы с вами узнали что такое ALTER TABLE, рассмотрели работу с этой командой и научились вносить с ее помощью изменения в таблицы и столбцы, а также рассмотрели несколько примеров использования данной команды, которые сильно упростят будущую работу с базами данных.