Spec-Zone.ru › MariaDB

ПЕРЕИМЕНОВАНИЕ ТАБЛИЦЫ

Синтаксис

RENAME TABLE[S] [IF EXISTS] tbl_name 
  [WAIT n | NOWAIT]
  TO new_tbl_name
    [, tbl_name2 TO new_tbl_name2] ...

Описание

Данное утверждение переименовывает одну или несколько таблиц или представлений, но не привилегии, связанные с ними.

IF EXISTS

MariaDB начиная с 10.5.2

Если используется данная директива, ошибка не возникнет, если таблицы, подлежащие переименованию, не существует.

Операция переименования выполняется атомарно, что означает, что ни одна другая сессия не может получить доступ к какой-либо из таблиц во время выполнения переименования. Например, если у вас есть существующая таблица 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.1

Начиная с MariaDB 10.6, RENAME TABLE атомарно для большинства движков, включая InnoDB, MyRocks, MyISAM и Aria (MDEV-23842). Это означает, что если произойдет сбой (отказ сервера или отключение питания) во время RENAME TABLE, все таблицы вернутся к своим исходным именам, а любые изменения в файлах триггеров будут отменены.

В более старых версиях MariaDB была небольшая вероятность того, что во время сбоя сервера в середине RENAME TABLE, некоторые таблицы могли быть переименованы (в худшем случае частично), в то время как другие не были переименованы.

См. Атомарные DDL для получения дополнительной информации.

Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержание не проверяется заранее компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержании, не обязательно отражают мнения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

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