DETACH 语句用于将表、物化视图、字典或数据库从服务器中分离,不会删除其数据或元数据。
DETACH TABLE|VIEW|DICTIONARY|DATABASE [IF EXISTS] [db.]name [PERMANENTLY] [SYNC]
执行分离操作后,对于数据的影响如下:
PERMANENTLY):服务器重启后不会自动识别,需手动执行 ATTACH 重新附加。ATTACH 语句重新附加。系统日志表,例如 query_log、text_log 等,也可以重新附加支持,但其他系统表不支持重新附加。ATTACH 重新附加后,方可再次进行永久分离操作。RENAME 操作。参数 | 是否必填 | 含义与作用 |
|---|---|---|
TABLE | VIEW | DICTIONARY |
IF EXISTS | 否 | 当对象不存在时不报错,跳过操作。 |
[db.]name | 是 | 指定对象所属数据库(可选)和名称。未指定数据库时使用当前数据库。 |
PERMANENTLY | 否 | 永久分离实体。服务器重启后不会自动恢复元数据。 |
SYNC | 否 | 立即同步执行操作,未指定时,默认异步。 |
创建表。
-- 1. 创建库 CREATE DATABASE IF NOT EXISTS sample_db ON CLUSTER sample_cluster; -- 2. 创建表 DROP TABLE IF EXISTS sample_db.sample_detach ON CLUSTER sample_cluster; CREATE TABLE sample_db.sample_detach ON CLUSTER sample_cluster ( id Int64 ) ENGINE = MergeTree() ORDER BY id; -- 3. 插入测试数据 INSERT INTO sample_db.sample_detach SELECT number FROM numbers(10); -- 4. 查询表中数据 SELECT * FROM sample_db.sample_detach; ┌─number─┐ │ 0 │ │ 1 │ │ 2 │ │ 3 │ │ 4 │ │ 5 │ │ 6 │ │ 7 │ │ 8 │ │ 9 │ └─────┘
分离一张表并查询该表。
DETACH TABLE sample_db.sample_detach; SELECT * FROM sample_db.sample_detach;
输出结果如下,表示表已分离:
Code: 60, e.displayText() = DB::Exception: Table sample_db.sample_detach doesn't exist SQLSTATE: 42P01 (version 21.9.1)