Наиболее сложный запрос при работе с таблицами — обновление ее структуры. Если посмотреть официальную документацию, то общая запись этого запроса занимает больше трех экранов монитора. Но ни один человек не помнит всех возможностей этой команды. Более того, большинство из них редко выполняются. Единственное, что нужно знать — возможности этой команды — общие принципы ее работы. А детали всегда можно будет найти в документации.
В этом уроке разберем такой тип запроса, как ALTER TABLE
. Он отвечает за изменение таблицы базы данных. Также узнаем, какие четыре операции со столбцами он включает в себя.
Запрос ALTER TABLE
Запрос ALTER TABLE
используют, чтобы изменять структуру столбца таблицы базы данных. Он включает четыре операции:
-
Добавление колонки
-
Переименование колонки
-
Удаление колонки
-
Обновление колонки
Разберем каждую операцию подробнее.
Добавление колонки
С помощью ALTER
можно добавить колонку в уже имеющуюся таблицу:
В этом примере мы добавили колонку age.
Делается это таким образом:
CREATE TABLE users (
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
username VARCHAR(50),
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMP
);
INSERT INTO users (created_at, email, username) VALUES ('2022-06-14 18:31:05.296', 'Trevion53@yahoo.com', 'Duncan3');
INSERT INTO users (created_at, email, username) VALUES ('2022-06-14 02:04:13.104', 'Baylee52@yahoo.com', 'Michaela11');
INSERT INTO users (created_at, email, username) VALUES ('2022-06-14 02:28:26.058', 'Casimer_Cronin@yahoo.com', 'Margarete_Hegmann6');
-- в таблицу "users"
-- добавить колонку с именем "birthday" и типом "date"
ALTER TABLE users ADD COLUMN birthday DATE;
View on DB Fiddle
Здесь после фразы ADD COLUMN
идет строка описания новой колонки, точно такая же, как и при создании таблицы. В простом варианте она выглядит так: <имя колонки> <тип>
. Здесь можно указывать любые ограничения, добавлять ключи, автогенерацию, значение по умолчанию и многое другое. Синтаксис на 100% совпадает с синтаксисом определения колонки, когда таблица создается.
Переименование колонки
Чтобы переименовать колонку, нужно сделать следующий запрос:
-- добавляем колонку, которой еще нет.
ALTER TABLE users ADD COLUMN name VARCHAR(255);
-- в таблице "users"
-- изменить колонку "name":
-- поменять имя с "name" на "first_name"
ALTER TABLE users RENAME COLUMN name TO first_name;
View on DB Fiddle
Здесь нет никаких сложностей — одно имя меняется на другое.
Удаление колонки
Следующий запрос удаляет колонку:
ALTER TABLE users ADD COLUMN age DATE;
-- в таблице "users"
-- удалить колонку с именем "age"
ALTER TABLE users DROP COLUMN age;
View on DB Fiddle
Это тоже простая операция, которая убирает ненужную колонку.
Обновление колонки
Команда по изменению параметров колонки наиболее сложная. Практически у каждого элемента, который поддается обновлению, есть собственный синтаксис для этого обновления. Вот несколько базовых примеров:
CREATE TABLE courses (
id bigint PRIMARY KEY,
name varchar(255) NOT NULL,
body text,
created_at timestamp
);
-- Установка ограничения уникальности в таблице courses для колонки name
ALTER TABLE courses
ADD UNIQUE (name);
-- Изменение типа данных в таблице courses для колонки created_at
-- и снятие ограничения NOT NULL в таблице courses для колонки name
ALTER TABLE courses
ALTER COLUMN created_at SET DATA TYPE DATE,
ALTER COLUMN name DROP NOT NULL;
-- Установка ограничения NOT NULL в таблицу courses для колонки name
ALTER TABLE courses
ALTER COLUMN name SET NOT NULL;
View on DB Fiddle
Наиболее распространенные команды:
-
ADD
— добавление ограничения: например, ключа или уникальности -
SET
— установка значения: например, типа данных -
DROP
— удаление ограничения
В рамках одного обновления можно группировать операции, но существует ряд исключений. Например, группировке не поддается операция RENAME
— ее нужно выполнять отдельным запросом, иначе СУБД завершит запрос с ошибкой.
Выводы
В этом уроке мы разобрали тип запроса ALTER
, который отвечает за изменение таблицы базы данных. Мы узнали, что с его помощью можно добавлять, переименовывать, удалять и обновлять колонки.
Первые три операции достаточно простые. При этом переименование или удаление колонок — небезопасные процессы. Если удалить колонки в работающей базе данных, это приведет к ошибкам, когда мы будем вставлять или обновлять записи. Любые выборки, включающие эту колонку, также завершатся с ошибкой.
Такие операции выполняют редко и только тогда, когда есть уверенность, что эти колонки никто не использует. Еще обновление колонки может серьезно влиять на производительность. А если данных много, то они будут обновляться продолжительное время — часы и даже дни.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.