JavaRush /Курсы /SQL SELF /Добавление и удаление столбцов в таблице

Добавление и удаление столбцов в таблице

SQL SELF
18 уровень , 0 лекция
Открыта

Представьте, что вы проектируете базу данных для университета. Сначала таблица студентов включает всего два поля: ID и имя. Всё просто, студенты начинают пользоваться системой. Но спустя месяц к вам приходят преподаватели и говорят: "А можно ещё добавить возраст?", а чуть позже: "Нужен ещё email". Ну а затем: "А давайте уберём, наконец, поле middle_name, всё равно его никто не заполняет!". Вот тут-то вам и пригодятся навыки работы с ALTER TABLE для добавления и удаления столбцов.

Синтаксис добавления столбцов

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

ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
  • table_name — имя таблицы, в которую вы хотите добавить новый столбец.
  • column_name — имя столбца, который вы хотите добавить.
  • data_type — тип данных, например, VARCHAR, INTEGER или DATE.
  • constraints (необязательный параметр) — ограничения, которые вы хотите наложить на этот столбец, например, NOT NULL, DEFAULT и т.д.

Пример: добавляем новый столбец

Допустим, у нас есть таблица students, которая была создана ранее:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

Вдруг поступила задача добавить столбец age для хранения возраста студентов. Вот как это делается:

ALTER TABLE students
ADD COLUMN age INTEGER;

Теперь структура таблицы students станет такой:

id name age
1 Eva NULL
2 Alex NULL

Если новые записи добавлять без указания возраста, то PostgreSQL автоматически присвоит значение NULL, так как мы не указали никаких ограничений вроде NOT NULL или значений по умолчанию (DEFAULT).

Синтаксис удаления столбцов

Удаление столбца из таблицы тоже осуществляется с помощью команды ALTER TABLE. Вот её синтаксис:

ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
  • table_name — имя таблицы, из которой вы хотите удалить столбец.
  • column_name — имя удаляемого столбца.
  • RESTRICT — запрет удаления столбца, если на него есть ссылки (по умолчанию).
  • CASCADE — удаление столбца вместе со всеми зависимостями.

Про каскадное удаление зависимостей я расскажу подробнее в следующем уровне :P

Пример: удаляем ненужный столбец

Вернёмся к таблице students. Мы решили, что поле age больше не нужно. Удалим его:

ALTER TABLE students
DROP COLUMN age;

Теперь структура таблицы снова упрощается:

id name
1 Eva
2 Alex

Полезные примеры

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

А если бы вы всё-таки захотели добавить столбец age, но с ограничением NOT NULL и значением по умолчанию? Вам бы подошел следующий код:

ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;

Теперь во всех существующих строках для столбца age установится значение 18, а новые записи потребуют обязательного указания значения для этого поля, если не используется значение по умолчанию.

Удаление столбца с зависимостями

Если у какого-то столбца есть зависимости (например, он используется в представлениях или триггерах), придется использовать модификатор CASCADE. Но будьте осторожны: это может затронуть другие объекты в вашей базе. Например:

ALTER TABLE students
DROP COLUMN email CASCADE;

Типичные ошибки и особенности

Ошибка: добавление столбца с неправильным типом данных.
Представьте, что вы добавляете столбец с типом INTEGER, но пытаетесь хранить в нем текстовые данные. PostgreSQL не поймёт вас и выдаст ошибку при добавлении записей. Тип данных всегда должен соответствовать содержимому.

Ошибка: удаление столбца без учёта зависимостей.
Например, если вы удалите столбец, на который ссылаются индексы или внешние ключи, PostgreSQL может выдать ошибку, если не указан модификатор CASCADE.

Ошибка: удаление столбца с зависимостями. Например, если вы удалите столбец, на который ссылаются индексы или внешние ключи, PostgreSQL может выдать ошибку, если не указан модификатор CASCADE. Вы его добавили и удалили тысячи строк, которые ссылались на вашу удаленную колонку. Которые не нужно было удалять : (

Особенность: порядок выполнения изменений.
Иногда добавление столбцов с ограничениями может требовать знаний о порядке выполнения операций. Например, если вы добавляете столбец с NOT NULL, то сначала нужно заполнить его значениями по умолчанию, иначе PostgreSQL выдаст ошибку.

2
Задача
SQL SELF, 18 уровень, 0 лекция
Недоступна
Добавление нового столбца
Добавление нового столбца
2
Задача
SQL SELF, 18 уровень, 0 лекция
Недоступна
Добавление столбца с ограничением
Добавление столбца с ограничением
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Alexandr Уровень 61
15 июля 2025
Не забывайте добавлять ";" в конце запросов.