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_nametbl_name_ibfk_”, чтобы отразить новое имя таблицы. InnoDB интерпретирует имена ограничений внешнего ключа, начинающиеся со строки “tbl_name_ibfk_”, как имена, сгенерированные внутри системы.
Имена ограничений внешнего ключа, которые указывают на переименованную таблицу, автоматически обновляются, если нет конфликта, в противном случае оператор завершается с ошибкой. Конфликт возникает, если переименованное имя ограничения уже существует. В таких случаях необходимо удалить и снова создать внешние ключи, чтобы они работали правильно.
© 2025 Oracle
Licensed under the GPLv2 License.