yandex
Калькулятор ценТарифыАкцииДокументацияО насКарьера в Cloud.ruНовостиЮридические документыКонтактыРешенияРеферальная программаКейсыПартнерство с Cloud.ruБезопасностьEvolutionAdvancedEvolution StackОблако VMwareML SpaceВ чем отличия платформ?БлогОбучение и сертификацияМероприятияИсследования Cloud.ruЛичный кабинетВойтиЗарегистрироватьсяEvolution ComputeEvolution Managed KubernetesEvolution Object StorageEvolution Managed PostgreSQL®Облако для мобильных и веб‑приложенийАналитика данных в облакеEvolution Bare MetalEvolution SSH KeysEvolution ImageСайт в облакеEvolution DNSEvolution VPCEvolution Load BalancerEvolution Magic RouterEvolution DiskХранение данных в облакеEvolution Container AppsEvolution Artifact RegistryEvolution Managed ArenadataDBEvolution Managed TrinoEvolution Managed SparkАналитика данных в облакеEvolution ML InferenceEvolution Distributed TrainEvolution ML FinetuningEvolution NotebooksCurator Anti-DDoSCurator Anti‑DDoS+WAFUserGate: виртуальный NGFWStormWall: Anti-DDoSEvolution TagsEvolution Task HistoryCloud MonitoringCloud LoggingАренда GPUAdvanced Object Storage ServiceAdvanced Elastic Cloud ServerAdvanced Relational Database Service for PostgreSQLРазработка и тестирование в облакеAdvanced Image Management ServiceAdvanced Auto ScalingDirect ConnectCDNCross-platform connectionAdvanced Enterprise RouterAdvanced Cloud Backup and RecoveryAdvanced Data Warehouse ServiceAdvanced Elastic Volume ServiceAdvanced Cloud Container EngineAdvanced FunctionGraphAdvanced Container Guard ServiceAdvanced Software Repository for ContainerAdvanced Document Database Service with MongoDBAdvanced Relational Database Service for MySQLAdvanced Relational Database Service for SQL ServerCloud AdvisorAdvanced Server Migration ServiceAdvanced Data Replication ServiceAdvanced API GatewayAdvanced CodeArtsAdvanced Distributed Message Service for KafkaAdvanced Distributed Message Service for RabbitMQAdvanced DataArts InsightAdvanced CloudTableAdvanced MapReduce ServiceAdvanced Cloud Trace ServiceAdvanced Application Performance ManagementAdvanced Identity and Access ManagementAdvanced Enterprise Project Management ServiceVMware: виртуальный ЦОД с GPUVMware: виртуальный ЦОДУдаленные рабочие столы (VDI)VMware: сервер Bare MetalИнфраструктура для 1С в облакеУдаленные рабочие столыМиграция IT‑инфраструктуры в облако3D-моделирование и рендерингVMware: резервное копирование виртуальных машинVMware: резервный ЦОДVMware: резервное копирование в облакоVMware: миграция виртуальных машин
Поиск
Связаться с нами

Мастерство ALTER TABLE: руководство по изменению структуры SQL-таблиц

ALTER TABLE — SQL-команда, которая нужна, чтобы менять структуру таблиц в реляционных базах данных. С ALTER TABLE вы можете добавлять и удалять столбцы, объединять их, переименовывать, настраивать ограничения. В статье расскажем, как применять команду в PostgreSQL — одной из самых популярных реляционных БД.

Инструкции
Иллюстрация для статьи на тему «Мастерство ALTER TABLE: руководство по изменению структуры SQL-таблиц»
Продукты из этой статьи:
Иконка-Advanced Relational Database Service for MySQL
Advanced Relational Database Service for MySQL
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®

Основы ALTER TABLE, синтаксис команды

Общий синтаксис команды ALTER TABLE выглядит так:

Дарим до 20 000 бонусов
Дарим до 20 000 бонусов
4 000 бонусов — физическим лицам, 20 000 бонусов — юридическим

Где:

  • имя_таблицы — название таблицы, в которую хотите внести изменения;

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

  • [параметры] — необязательный элемент, в этом месте вы указываете параметры, которые уточнят операцию.

Общий синтаксис команды в разных СУБД похож, но между конкретными системами есть различия — при работе стоит их учитывать. Например, одно из ключевых различий синтаксиса ALTER TABLE в PostgreSQL и MySQL — количество действий за один запрос. В PostgreSQL за раз можно сделать что-то одно, а в MySQL можно перечислять действия через запятую.

Информацию об особенностях применения и синтаксиса команды вы можете найти в документации СУБД, которую используете.

Документация СУБД: где найти информацию об особенностях применения и синтаксиса командыРаздел документации PostgreSQL о том, как использовать ALTER TABLE
Официальная документация MySQLОфициальная документация MySQL, где тоже рассказано о применении команды

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

Здесь расскажем о двух базовых операциях с ALTER TABLE — добавлении и удалении столбцов. Рассмотрим конкретные примеры и дадим варианты кода.

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

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

Эта команда добавляет в таблицу products новый столбец description, чтобы хранить там текстовую информацию.

Когда вы добавите столбец, он автоматически заполнится значениями NULL. Чтобы по умолчанию задать другое, используйте:

Если столбец обязателен для заполнения, вы можете сразу добавить ограничение NOT NULL.

Облачная СУБД PostgreSQL
Облачная СУБД PostgreSQL
Храните данные, управляйте ими, выполняйте параллельные операции и масштабируйте БД в зависимости от нагрузки.
Узнать больше

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

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

Удаление столбца — это необратимая операция. Перед тем, как выполнить команду, проверьте вот что:

  • отсутствуют внешние ключи — ссылки на этот столбец из других таблиц;

  • столбец не используется в представлениях (views) или хранимых процедурах (stored procedures);

  • данные из столбца точно не понадобятся в будущем.

Изменение существующих столбцов

Рассмотрим, как менять столбцы, а именно — их названия и тип данных в ячейках.

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

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

Чтобы изменить тип данных, выполните:

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

Изменение типа данных больших таблиц может занять время. В рабочих БД выполняйте такие операции в периоды низкой нагрузки.

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

Названия столбцов в таблице могут быть непонятными. Допустим, раздел с адресами офисов компании называется location вместо office addresses. Первое наименование не дает ответа на вопрос, о какой локации идет речь, и при работе с БД можно легко запутаться.

Это не единственная ситуация, когда может понадобиться переименовать столбец. Чтобы это сделать, выполните:

Учтите, что операция совершается только с метаданными. Сами данные в столбце никуда не деваются, информация остается в первоначальном виде. А еще операция выполняется мгновенно, даже для очень больших таблиц.

Важно: если на столбец ссылаются другие объекты базы (views, functions), их тоже нужно будет обновить. Проверить зависимости можно через графический интерфейс pgAdmin или через специальные утилиты.

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

Здесь поговорим о том, как поменять название таблицы и изменить ее структуру, например, разделить столбец на два.

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

Бывают ситуации, когда название таблицы перестает отражать ее содержание или не соответствует новым бизнес-правилам. Например, таблица user_orders может стать просто orders, если в системе остались только заказы пользователей.

Для этого используется:

Что важно знать о переименовании:

  • Операция выполняется мгновенно и не блокирует таблицу надолго.

  • Информация внутри остается нетронутой — меняется только название самой таблицы.

  • Индексы и ограничения, которые связаны с таблицей, обновляются автоматически.

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

Арендуйте облачную СУБД MySQL
Арендуйте облачную СУБД MySQL
Быстрый запуск, обработка большого объема данных и простая настройка. А еще плата за аренду по модели pay-as-you-go.
Узнать больше

Рефакторинг структуры таблицы

Когда простого переименования недостаточно, может потребоваться более глубокая переработка структуры таблицы. В качестве примера рассмотрим ситуацию, когда в БД предприятия имена и фамилии работников находятся в одном столбце, но нужно разнести их по разным. Тогда нужно разделить столбец «полное имя» на два — «имя» и «фамилия»:

Рассмотрим обратную ситуацию: есть два столбца, но вы хотите их объединить:

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

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

Ключи и ограничения поддерживают целостность данных, работают как строгие правила. Например, первичный ключ не позволяет создать двух клиентов с одинаковым ID, а внешний ключ не позволит удалить категорию товара, если с ней уже связаны товары.

В этом разделе расскажем, какие бывают ключи, как с ними работать, а еще рассмотрим разные типы ограничений.

Добавление и удаление первичных и внешних ключей

Есть два типа ключей — первичные и внешние. Первичные обеспечивают уникальность каждой записи в таблице. Они не позволяют создать две одинаковые записи и ускоряют поиск данных.

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

Чтобы удалить ключи, вам надо знать имя ограничения. Важно — имя именно ограничения, а не ключа. Если имя не задано явно, значит, система сгенерировала его автоматически.

Управление ограничениями

Ограничения помогают контролировать качество данных на уровне БД. Вот основные типы:

  • UNIQUE гарантирует уникальность значений в столбце:

  • CHECK проверяет значения по заданному условию:

  • NOT NULL запрещает пустые значения:

Ограничения CHECK и NOT NULL установятся, только когда существующие данные им соответствуют. Что это значит: если в таблице есть строки price = 0, ограничение CHECK (price > 0) не сработает. А при попытке добавить NOT NULL к столбцу, где есть пустые значения (NULL), команда завершится ошибкой.

  • DEFAULT задает значение по умолчанию:

Лучшие практики

При работе с ALTER TABLE помните о нескольких важных правилах. Они помогут вам не потерять данные, сохранить работоспособность сервисов, а еще быстрее работать и вовремя находить проблемы.

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

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

  3. Объединяйте изменения в одну транзакцию. Это обеспечит целостность данных: применятся либо все изменения, либо вообще ничего.

  4. Документируйте. Ведите журнал изменений. Он понадобится при отладке: вы быстро глянете записи, поймете, когда и что менялось, и быстрее решите возникшую проблему.

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

Продукты из этой статьи:
Иконка-Advanced Relational Database Service for MySQL
Advanced Relational Database Service for MySQL
Иконка-Evolution Managed PostgreSQL®
Evolution Managed PostgreSQL®
6 ноября 2025

Вам может понравиться