ПЕРЕИМЕНОВАНИЕ ТАБЛИЦЫ
Синтаксис
RENAME TABLE[S] [IF EXISTS] tbl_name
[WAIT n | NOWAIT]
TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
Описание
Данное утверждение переименовывает одну или несколько таблиц или представлений, но не привилегии, связанные с ними.
IF EXISTS
Если используется данная директива, ошибка не возникнет, если таблицы, подлежащие переименованию, не существует.
Операция переименования выполняется атомарно, что означает, что ни одна другая сессия не может получить доступ к какой-либо из таблиц во время выполнения переименования. Например, если у вас есть существующая таблица old_table, вы можете создать другую таблицу new_table с той же структурой, но пустую, а затем заменить существующую таблицу пустой следующим образом (предполагая, что backup_table еще не существует):
CREATE TABLE new_table (...); RENAME TABLE old_table TO backup_table, new_table TO old_table;
tbl_name может быть необязательно указано как db_name.tbl_name. См. Квалификаторы идентификаторов. Это позволяет использовать RENAME для перемещения таблицы из одной базы данных в другую (при условии, что они находятся на одном файловом сервере):
RENAME TABLE db1.t TO db2.t;
Обратите внимание, что перемещение таблицы в другую базу данных невозможно, если у неё есть некоторые триггеры. Попытка сделать это приводит к следующей ошибке:
ERROR 1435 (HY000): Trigger in wrong schema
Кроме того, представления не могут быть перемещены в другую базу данных:
ERROR 1450 (HY000): Changing schema from 'old_db' to 'new_db' is not allowed.
Несколько таблиц могут быть переименованы в одном операторе. Наличие или отсутствие необязательного S (RENAME TABLE или RENAME TABLES) не оказывает влияния, переименовывается ли одна или несколько таблиц.
Если оператор переименовывает более одной таблицы, и одно переименование завершается ошибкой, все переименования, выполненные одним и тем же оператором, отменяются.
Переименования всегда выполняются в указанном порядке. Зная это, также возможно поменять имена двух таблиц:
RENAME TABLE t1 TO tmp_table,
t2 TO t1,
tmp_table TO t2;
WAIT/NOWAIT
Установить тайм-аут ожидания блокировки. См. WAIT и NOWAIT.
Привилегии
Для выполнения оператора RENAME TABLE требуются привилегии DROP, CREATE и INSERT для таблицы или базы данных.
Атомарное переименование таблицы
Начиная с MariaDB 10.6, RENAME TABLE атомарно для большинства движков, включая InnoDB, MyRocks, MyISAM и Aria (MDEV-23842). Это означает, что если произойдет сбой (отказ сервера или отключение питания) во время RENAME TABLE, все таблицы вернутся к своим исходным именам, а любые изменения в файлах триггеров будут отменены.
В более старых версиях MariaDB была небольшая вероятность того, что во время сбоя сервера в середине RENAME TABLE, некоторые таблицы могли быть переименованы (в худшем случае частично), в то время как другие не были переименованы.
См. Атомарные DDL для получения дополнительной информации.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/rename-table/