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

PostgreSQL

PostgreSQL поддерживает прямое переименование столбцов с версии 8.0. Синтаксис прост и не требует указания типа данных.
Пример:
ALTER TABLE users RENAME COLUMN username TO login;
Индексы и ограничения, связанные со столбцом, сохраняются автоматически.
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 прямого синтаксиса 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;
Переименование не влияет на данные и выполняется мгновенно для таблиц любого размера.
Практические рекомендации
- Перед изменением выполните резервное копирование схемы.
- Проверьте зависимости через системные каталоги или средства администрирования.
- На MySQL старых версий заранее уточните точный тип и атрибуты столбца.
- После переименования выполните тесты запросов и ORM-моделей.
Переименование столбца в 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, удалить старую таблицу и переименовать новую. Также потребуется заново создать индексы и ограничения.
