テーブル名の変更
このステートメントは、既存のテーブルとビューの名前を変更するために使用され、複数のテーブルの名前を一度に変更したり、データベース間で名前を変更したりすることをサポートします。
概要
- RenameTableStmt
- TableToTable
RenameTableStmt ::=
'RENAME' 'TABLE' TableToTable ( ',' TableToTable )*
TableToTable ::=
TableName 'TO' TableName
例
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.t1
とdb4
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 と完全に互換性があります。互換性の違いが見つかった場合は、 バグを報告する 。