Rename Table¶
在 MatrixOne 中,RENAME TABLE 语句用于更改表的名称。可以一次更改多个表的名称。
语法说明¶
在 MatrixOne 中,RENAME TABLE 语句用于更改表的名称。可以一次更改多个表的名称。
注意事项:
RENAME TABLE 是原子操作。如果任何一个重命名失败,所有的重命名操作都会回滚。
不能跨不同的数据库重命名表。如果想跨数据库重命名表,可以先将表复制到目标数据库,然后删除原表
在重命名表之前,确保没有正在使用该表的活动事务或锁定。
语法结构¶
> RENAME TABLE
tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...
链式 RENAME TABLE(多对原子重命名)¶
RENAME TABLE 支持在一条语句中指定多对重命名,原子化执行。语句中的所有重命名要么全部成功,要么全部失败。这实现了经典的 MySQL 风格三向交换模式,用于零停机的表轮换:
RENAME TABLE t_live TO t_tmp, t_shadow TO t_live, t_tmp TO t_shadow;
每个源表必须在语句开始时已存在,每个目标名称在开始时不得存在(除非该表在同一语句中被重命名)。在一条语句中将同一源表重命名为两个不同目标是错误的。
示例¶
基本重命名¶
create table old_table1(n1 int);
create table old_table2(n1 int);
create table old_table3(n1 int);
RENAME TABLE old_table1 TO new_table1;
RENAME TABLE old_table2 TO new_table2,old_table3 TO new_table3;
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| new_table1 |
| new_table2 |
| new_table3 |
+---------------+
3 rows in set (0.00 sec)
链式原子交换¶
DROP DATABASE IF EXISTS test_rename_chain;
CREATE DATABASE test_rename_chain;
USE test_rename_chain;
-- 三向原子交换:live <-> shadow
CREATE TABLE t_live (id INT);
CREATE TABLE t_shadow (id INT);
INSERT INTO t_live VALUES (100);
INSERT INTO t_shadow VALUES (200);
RENAME TABLE t_live TO t_tmp, t_shadow TO t_live, t_tmp TO t_shadow;
SELECT * FROM t_live;
SELECT * FROM t_shadow;
-- 多对非冲突重命名
CREATE TABLE a (id INT);
CREATE TABLE b (id INT);
INSERT INTO a VALUES (1);
INSERT INTO b VALUES (2);
RENAME TABLE a TO c, b TO a;
SELECT * FROM a;
SELECT * FROM c;
DROP DATABASE test_rename_chain;