JavaRush /Курсы /SQL SELF /Изменение структуры таблиц с помощью ALTER TABLE

Изменение структуры таблиц с помощью ALTER TABLE

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

Теперь пора поговорить о том, как изменять уже существующие таблицы. В жизни проекта редко что остаётся неизменным — требования могут прилететь внезапно, как бомбардилокрокодило. Например, продакт-менеджер вдруг решает, что каждому пользователю нужен уникальный идентификатор любимого цвета фона профиля. Или вы понимаете, что VARCHAR(50) для имени — это несерьёзно, ведь в базе уже сидит пользователь с именем "Бомбардилокрокодило-Джуниор-Третий".

Что ж, в PostgreSQL для решения таких задач есть инструмент — команда ALTER TABLE.

ALTER TABLE — это команда, которая позволяет изменять структуру существующих таблиц. С её помощью можно:

  • Добавить новые столбцы;
  • Удалить ненужные столбцы;
  • Изменить тип данных столбца;
  • Переименовать таблицу или её столбцы;
  • Добавить или удалить ограничения, такие как NOT NULL, UNIQUE, и многое другое.

Скажем так, это как если бы вы уже построили дом (таблицу), но теперь хотите добавить к нему новую комнату (столбец) или убрать ненужную кладовку (удалить столбец).

Синтаксис ALTER TABLE

Общая структура команды довольно интуитивно понятна:

ALTER TABLE таблица
    действие_изменения;

Где:

  • таблица — имя таблицы, которую вы хотите изменить;
  • действие_изменения — конкретное действие, которое вы хотите выполнить (например, добавить столбец, удалить его или изменить тип данных).

Примеры использования ALTER TABLE

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

Если вы хотите добавить в таблицу новый столбец, то используйте команду ADD COLUMN. Вот пример:

ALTER TABLE students
ADD COLUMN email VARCHAR(100);

Эта команда добавит новый столбец email в таблицу students, где будет храниться адрес электронной почты студента. Тип данных столбца — строка длиной до 100 символов.

Допустим, вы создали таблицу студентов, но забыли добавить информацию о дате их зачисления. Вот как это исправить:

ALTER TABLE students
ADD COLUMN enrollment_date DATE;

Теперь у вас появился столбец enrollment_date, и вы можете сохранить дату зачисления.

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

Если вы решили, что какой-то столбец больше не нужен, используйте команду DROP COLUMN. Например:

ALTER TABLE students
DROP COLUMN email;

Эта команда удаляет столбец email из таблицы students. Имейте в виду, что данные из этого столбца также будут удалены без возможности восстановления.

Важный момент:

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

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

Бывает, что изначально выбранный тип данных столбца не подходит. Например, вы решили хранить возраст студентов как SMALLINT, а потом поняли, что этого недостаточно, и хотите использовать BIGINT. Вот как это сделать:

ALTER TABLE students
ALTER COLUMN age TYPE BIGINT;

Важный момент: если данные уже записаны в столбец, PostgreSQL проверяет, можно ли их преобразовать к новому типу. Если нельзя, вы получите ошибку.

Допустим, вы создали столбец description как VARCHAR(100), но потом поняли, что описание курсов может быть гораздо длиннее. Измените тип данных на TEXT:

ALTER TABLE courses
ALTER COLUMN description TYPE TEXT;

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

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

Если вам нужно изменить имя столбца, используйте команду RENAME COLUMN:

ALTER TABLE students
RENAME COLUMN name TO full_name;

Теперь столбец name будет называться full_name.

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

Вы можете также поменять имя самой таблицы. Для этого используется команда RENAME TO:

ALTER TABLE students
RENAME TO university_students;

Теперь таблица students будет называться university_students.

Установка/удаление ограничения NOT NULL

Предположим, вы создали столбец, но забыли сделать его обязательным (NOT NULL). Не проблема! Вы можете добавить это ограничение позже:

ALTER TABLE students
ALTER COLUMN name SET NOT NULL;

Если хотите снять ограничение NOT NULL, используйте команду DROP NOT NULL:

ALTER TABLE students
ALTER COLUMN name DROP NOT NULL;

Установка значения по умолчанию

Если столбец уже существует, но вы хотите задать для него значение по умолчанию, используйте SET DEFAULT:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date SET DEFAULT CURRENT_DATE;

Чтобы убрать значение по умолчанию, выполните:

ALTER TABLE enrollments
ALTER COLUMN enrollment_date DROP DEFAULT;

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

Типичные ошибки при использовании ALTER TABLE

При работе с ALTER TABLE могут возникнуть ошибки. Вот самые распространённые:

Попытка изменить тип данных, который несовместим с текущими данными. Например, если в столбце age уже есть данные, а вы пытаетесь его преобразовать в строку VARCHAR, это вызовет ошибку. Решение: сначала удалите или преобразуйте данные.

Попытка удалить столбец, который используется как внешний ключ или индекс. PostgreSQL не позволит вам сделать это, чтобы сохранить целостность данных. Перед удалением зависимых столбцов необходимо удалить связи.

Ошибки синтаксиса. Команда ALTER TABLE достаточно гибкая, но требует точного соблюдения синтаксиса. Например, команда ADD COLUMN должна включать тип данных.

Реальные сценарии применения

В реальной жизни команда ALTER TABLE используется постоянно. Вы можете встретить её при:

  • Добавлении новых данных в существующую таблицу (например, новых столбцов);
  • Оптимизации базы данных (например, изменении типов данных для уменьшения объёма памяти);
  • Коррекции ошибок проектирования (например, если изначально забыли про ограничения или неверно выбрали тип данных).

Вы теперь понимаете, насколько мощной является команда ALTER TABLE. Это мощный инструмент, который помогает справляться с изменениями в проекте. Главное — будьте внимательны и не торопитесь, чтобы случайно не "сломать дом" (вашу таблицу), пытаясь пристроить новую комнату.

2
Задача
SQL SELF, 17 уровень, 4 лекция
Недоступна
Добавление нового столбца в таблицу
Добавление нового столбца в таблицу
2
Задача
SQL SELF, 17 уровень, 4 лекция
Недоступна
Изменение типа данных столбца
Изменение типа данных столбца
1
Опрос
Основы создания таблиц, 17 уровень, 4 лекция
Недоступен
Основы создания таблиц
Основы создания таблиц
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анатолий Уровень 49
2 февраля 2026
;
Ra Уровень 35 Student
30 июля 2025
Мне кажется, или set data type не было в лекции
Евгений Уровень 49 Expert
4 августа 2025
Да, не было. А вообще https://www.postgresql.org/docs/current/sql-altertable.html пишут, что писать такую штуку необязательно, можно просто type.
Slevin Уровень 57
10 сентября 2025
Так же написал привычное 'type text', но сходил на... т.к. валидатору именно прям нужна полная форма. Которая идентична по функционалу.