Spec-Zone.ru › MySQL 5.7

13.1.33 Оператор RENAME TABLE

RENAME TABLE
    tbl_name TO new_tbl_name
    [, tbl_name2 TO new_tbl_name2] ...

RENAME TABLE переименовывает одну или несколько таблиц. Вам необходимо иметь ALTER и DROP права для исходной таблицы, а также CREATE и INSERT права для новой таблицы.

Например, чтобы переименовать таблицу с именем old_table в new_table, используйте этот оператор:

RENAME TABLE old_table TO new_table;

Этот оператор эквивалентен следующему оператору ALTER TABLE:

ALTER TABLE old_table RENAME new_table;

Оператор RENAME TABLE, в отличие от ALTER TABLE, может переименовывать несколько таблиц в одном операторе:

RENAME TABLE old_table1 TO new_table1,
             old_table2 TO new_table2,
             old_table3 TO new_table3;

Операции переименования выполняются слева направо. Таким образом, чтобы поменять местами два имени таблиц, сделайте следующее (предполагается, что таблица с промежуточным именем tmp_table еще не существует):

RENAME TABLE old_table TO tmp_table,
             new_table TO old_table,
             tmp_table TO new_table;

Блокировки метаданных на таблицах приобретаются в порядке имен, что в некоторых случаях может повлиять на результат операции при одновременном выполнении нескольких транзакций. См. Раздел 8.11.4, «Блокировка метаданных».

Для выполнения RENAME TABLE не должно быть активных транзакций или заблокированных таблиц с помощью LOCK TABLES. При соблюдении условий блокировки транзакций таблица, операция переименования выполняется атомарно; ни одна другая сессия не может получить доступ к таблицам во время выполнения переименования.

Если при выполнении RENAME TABLE произойдут какие-либо ошибки, оператор завершается неудачно, и изменения не производятся.

Вы можете использовать RENAME TABLE для перемещения таблицы из одной базы данных в другую:

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

Использование этого метода для перемещения всех таблиц из одной базы данных в другую фактически переименовывает базу данных (операция, для которой у MySQL нет отдельного оператора), за исключением того, что исходная база данных продолжает существовать, но без таблиц.

Как и RENAME TABLE, ALTER TABLE ... RENAME также может использоваться для перемещения таблицы в другую базу данных. Независимо от используемого оператора, если операция переименования переместит таблицу в базу данных, расположенную на другой файловой системе, успех результата зависит от платформы и зависит от используемых вызовов операционной системы для перемещения файлов таблиц.

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

Для переименования TEMPORARY таблиц, RENAME TABLE не работает. Используйте ALTER TABLE вместо этого.

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

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

RENAME TABLE tbl_name TO new_tbl_name изменяет имена внутренних ограничений внешнего ключа и имена ограничений внешнего ключа, определенные пользователем, начинающиеся с строки “tbl_name_ibfk_”, чтобы отразить новое имя таблицы. InnoDB интерпретирует имена ограничений внешнего ключа, начинающиеся со строки “tbl_name_ibfk_”, как имена, сгенерированные внутри системы.

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/rename-table.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API