Spec-Zone.ru › MySQL 9.2

15.1.38 Оператор 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;

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

Вы можете переименовать таблицы, заблокированные оператором LOCK TABLES, при условии, что они заблокированы с помощью блокировки WRITE или являются результатом переименования таблиц, заблокированных WRITE, из предыдущих шагов операции переименования нескольких таблиц. Например, это разрешено:

LOCK TABLE old_table1 WRITE;
RENAME TABLE old_table1 TO new_table1,
             new_table1 TO new_table2;

Это не разрешено:

LOCK TABLE old_table1 READ;
RENAME TABLE old_table1 TO new_table1,
             new_table1 TO new_table2;

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

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

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

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

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

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

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

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

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

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

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

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

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

RENAME TABLE tbl_name TO new_tbl_name изменяет сгенерированные системой и определенные пользователем имена ограничений CHECK, которые начинаются со строки “tbl_name_chk_”, чтобы отразить новое имя таблицы. MySQL интерпретирует имена ограничений CHECK, которые начинаются со строки “tbl_name_chk_”, как сгенерированные системой. Пример:

mysql> SHOW CREATE TABLE t1\G
*************************** 1. row ***************************
       Table: t1
Create Table: CREATE TABLE `t1` (
  `i1` int(11) DEFAULT NULL,
  `i2` int(11) DEFAULT NULL,
  CONSTRAINT `t1_chk_1` CHECK ((`i1` > 0)),
  CONSTRAINT `t1_chk_2` CHECK ((`i2` < 0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.02 sec)

mysql> RENAME TABLE t1 TO t3;
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW CREATE TABLE t3\G
*************************** 1. row ***************************
       Table: t3
Create Table: CREATE TABLE `t3` (
  `i1` int(11) DEFAULT NULL,
  `i2` int(11) DEFAULT NULL,
  CONSTRAINT `t3_chk_1` CHECK ((`i1` > 0)),
  CONSTRAINT `t3_chk_2` CHECK ((`i2` < 0))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.01 sec)

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

Spec-Zone.ru

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