跳到主要内容

如何使用 exchange 命令切换表

·2 分钟阅读
如何使用 exchange 命令切换表

问题

如何使用 EXCHANGE 命令切换表名?

答案

当您需要将当前表与另一个临时表(可能在其中更新了主键或其他设置)进行切换时,EXCHANGE 命令非常有用。这与 RENAME 命令相比是原子性的。当您有物化视图在源表上触发并且试图避免重建视图时,它也很有用。

下面是一个关于它如何工作以及如何测试的简单示例

  • 创建示例数据库
create database db1;
  • 创建示例表
create table db1.table1_exchange
(
id Int32,
string_field String
)
engine = MergeTree()
order by id;
  • 插入示例行
insert into db1.table1_exchange
values
(1, 'a');
  • 创建将要交换的示例临时表
create table db1.table1_exchange_temp
(
id Int32,
string_field String
)
engine = MergeTree()
order by id;
  • 将示例行插入到临时表
insert into db1.table1_exchange_temp
values
(2, 'b');
  • 运行 EXCHANGE 命令来切换表
exchange tables db1.table1_exchange and db1.table1_exchange_temp;
  • 测试表现在已交换并显示行已切换
select * from db1.table1_exchange;
┌─id─┬─string_field─┐
│ 2 │ b │
└────┴──────────────┘

1 row in set. Elapsed: 0.002 sec.