テーブル名の変更

このステートメントは、既存のテーブルとビューの名前を変更するために使用され、複数のテーブルの名前を一度に変更したり、データベース間で名前を変更したりすることをサポートします。

概要

RenameTableStmt
RENAMETABLETableToTable,
TableToTable
TableNameTOTableName

CREATE TABLE t1 (a int);
Query OK, 0 rows affected (0.12 sec)
SHOW TABLES;
+----------------+ | Tables_in_test | +----------------+ | t1 | +----------------+ 1 row in set (0.00 sec)
RENAME TABLE t1 TO t2;
Query OK, 0 rows affected (0.08 sec)
SHOW TABLES;
+----------------+ | Tables_in_test | +----------------+ | t2 | +----------------+ 1 row in set (0.00 sec)

次の例は、データベースdb1 db2既に存在し、テーブルdb1.t1db4 db3.t3既に存在していることを前提として、データベース間で複数のテーブルdb3名前を変更する方法を示しています。

RENAME TABLE db1.t1 To db2.t2, db3.t3 To db4.t4;
Query OK, 0 rows affected (0.08 sec)
USE db1; SHOW TABLES;
Database changed Empty set (0.00 sec)
USE db2; SHOW TABLES;
Database changed +---------------+ | Tables_in_db2 | +---------------+ | t2 | +---------------+ 1 row in set (0.00 sec)
USE db3; SHOW TABLES;
Database changed Empty set (0.00 sec)
USE db4; SHOW TABLES;
Database changed +---------------+ | Tables_in_db4 | +---------------+ | t4 | +---------------+ 1 row in set (0.00 sec)

アトミック名前変更を使用すると、テーブルが存在しない瞬間を発生させることなく、テーブルをスワップアウトできます。

CREATE TABLE t1(id int PRIMARY KEY);
Query OK, 0 rows affected (0.04 sec)
CREATE TABLE t1_new(id int PRIMARY KEY, n CHAR(0));
Query OK, 0 rows affected (0.04 sec)
RENAME TABLE t1 TO t1_old, t1_new TO t1;
Query OK, 0 rows affected (0.07 sec)
SHOW CREATE TABLE t1\G
*************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int NOT NULL, `n` char(0) DEFAULT NULL, PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin 1 row in set (0.00 sec)

MySQL 互換性

TiDB のRENAME TABLEステートメントは MySQL と完全に互換性があります。互換性の違いが見つかった場合は、 バグを報告する

参照

このページは役に立ちましたか?