Переименование столбца в SQL примеры для разных СУБД

Как переименовать столбец в sql

Как переименовать столбец в sql

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

Переименование столбца – это операция изменения метаданных таблицы без влияния на хранимые значения. Реализация зависит от конкретной СУБД: где-то используется ALTER TABLE … RENAME COLUMN, где-то – вспомогательные процедуры или полный пересоздание столбца. Перед выполнением операции рекомендуется проверить зависимости: индексы, представления, триггеры и хранимые процедуры.

  • Операция требует эксклюзивной блокировки таблицы в большинстве СУБД.
  • Права пользователя должны включать ALTER на таблицу.
  • Имя нового столбца не должно совпадать с существующими.

Примеры для популярных СУБД

Примеры для популярных СУБД

PostgreSQL

PostgreSQL

PostgreSQL поддерживает прямое переименование столбцов с версии 8.0. Синтаксис прост и не требует указания типа данных.

Пример:

ALTER TABLE users RENAME COLUMN username TO login;

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

MySQL и MariaDB

MySQL и MariaDB

В MySQL до версии 8.0.3 используется команда CHANGE, требующая повторного указания типа данных. Начиная с 8.0.3 доступен RENAME COLUMN.

MySQL 8.0.3+:

ALTER TABLE users RENAME COLUMN username TO login;

MySQL 5.7 и ниже:

ALTER TABLE users CHANGE username login VARCHAR(255) NOT NULL;

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

SQL Server и Oracle

SQL Server и Oracle

В SQL Server прямого синтаксиса ALTER TABLE для переименования нет. Используется системная процедура sp_rename.

SQL Server:

EXEC sp_rename ‘users.username’, ‘login’, ‘COLUMN’;

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

В Oracle применяется команда RENAME COLUMN, доступная начиная с версии 9i.

Oracle:

ALTER TABLE users RENAME COLUMN username TO login;

Переименование не влияет на данные и выполняется мгновенно для таблиц любого размера.

Практические рекомендации

  1. Перед изменением выполните резервное копирование схемы.
  2. Проверьте зависимости через системные каталоги или средства администрирования.
  3. На MySQL старых версий заранее уточните точный тип и атрибуты столбца.
  4. После переименования выполните тесты запросов и ORM-моделей.

Переименование столбца в SQL: примеры для разных СУБД

Переименование столбца в SQL: примеры для разных СУБД

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

MySQL 8.0+ поддерживает прямое переименование без описания типа данных:

ALTER TABLE users RENAME COLUMN username TO login;

Для MySQL 5.7 и ниже используется конструкция CHANGE, требующая повторного указания типа и ограничений:

ALTER TABLE users CHANGE username login VARCHAR(100) NOT NULL;

PostgreSQL использует простой и безопасный синтаксис, не затрагивающий тип данных:

ALTER TABLE users RENAME COLUMN username TO login;

Команда автоматически обновляет зависимости внутри схемы, включая индексы и ограничения.

Microsoft SQL Server применяет системную процедуру, а не ALTER TABLE:

EXEC sp_rename 'users.username', 'login', 'COLUMN';

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

Oracle Database поддерживает переименование через стандартный SQL-синтаксис:

ALTER TABLE users RENAME COLUMN username TO login;

Операция не влияет на данные, но может потребовать перекомпиляции зависимых объектов.

SQLite поддерживает переименование столбцов начиная с версии 3.25.0:

ALTER TABLE users RENAME COLUMN username TO login;

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

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

Вопрос-ответ:

Можно ли переименовать столбец без потери данных?

Да, переименование столбца не затрагивает содержимое таблицы. Операция меняет только имя поля в схеме. В MySQL 8.0+, PostgreSQL, Oracle и новых версиях SQLite данные сохраняются автоматически. Риск возникает лишь при использовании старых версий СУБД, где требуется пересоздание таблицы — там важно корректно скопировать данные.

Почему в MySQL команда ALTER TABLE иногда требует указания типа столбца?

В MySQL до версии 8.0 используется оператор CHANGE. Он не просто меняет имя, а заново описывает столбец. Поэтому необходимо указать тип данных, NULL/NOT NULL, значения по умолчанию и другие параметры. Если пропустить часть свойств, они будут сброшены.

Обновляются ли индексы и внешние ключи при переименовании столбца?

В PostgreSQL и Oracle имена столбцов в индексах и ограничениях обновляются автоматически. В SQL Server и MySQL это зависит от типа объекта. Структурные связи сохраняются, но код представлений, триггеров и хранимых процедур может остаться со старым именем и потребовать ручной правки.

Можно ли выполнить переименование столбца внутри транзакции?

PostgreSQL и Oracle позволяют откатить операцию при ошибке, так как DDL-команды работают в транзакциях. В MySQL и SQL Server поведение другое: команда фиксируется сразу, откат невозможен. Это стоит учитывать при работе на боевых базах.

Как переименовать столбец в SQLite старой версии?

Если версия SQLite ниже 3.25.0, прямой команды нет. Нужно создать новую таблицу с нужным именем столбца, перенести данные через INSERT SELECT, удалить старую таблицу и переименовать новую. Также потребуется заново создать индексы и ограничения.

Ссылка на основную публикацию