参考资料
https://clickhouse.tech/docs/en/sql-reference/statements
版本:v20.11
由于官方对这些小项的介绍很简短,于是对其进行了整理归纳。
目录
库和表的轻量级操作查询
use语句
USE db
用于设置当前会话使用的数据库。
如果在查询中未明确定义数据库,则使用当前数据库搜索表。
由于没有会话概念,因此在使用HTTP协议时无法进行此查询。
RENAME语句
重命名一个或多个表。
RENAME TABLE [db11.]name11 TO [db12.]name12, [db21.]name21 TO [db22.]name22, ... [ON CLUSTER cluster]
重命名表是一项轻量级操作。
如果在TO之后指定另一个数据库,那么该表被移植该数据库。但是,数据库的目录必须位于同一文件系统中(否则,将返回错误)。
如果您在一个查询中重命名多个表,因为该操作并不是原子性操作,因此可能会出现部分执行的情况。其他会话中查询可能会产生错误:Table ... doesn't exist ..
.
DESCRIBE TABLE语句
DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
返回以下字符串类型的列:
name
— 列名type
— 列类型default_type
— 默认表达式(DEFAULT,MATERIALIZED或ALIAS)中使用的条款。 如果未指定默认表达式,则该列包含一个空字符串。default_expression
— DEFAULT子句中指定的值。comment_expression
— 描述信息
嵌套的数据结构以“expanded”格式输出。 每列分别显示,名称后加点号。
EXISTS语句
EXISTS [TEMPORARY] [TABLE|DICTIONARY] [db.]name [INTO OUTFILE filename] [FORMAT format]
返回UInt8类型的单列,如果表或数据库不存在,则返回单个值0;如果存在,则返回单个值1。
ATTACH语句
ATTACH TABLE [IF NOT EXISTS] [db.]name [ON CLUSTER cluster]
此查询语句结构与CREATE相同,但是:
- 不使用单词CREATE,而是ATTACH.
- 查询不会在磁盘上创建数据,而是假定数据已经在适当的位置,只是将有关表的信息添加到服务器。执行ATTACH查询后,服务器将知道该表存在。
如果该表之前是分离的(DETACH),则意味着该表的结构已知,可以使用简化语句而不用指定表结构。
启动服务器时使用此查询。 服务器将表元数据存储为带有ATTACH查询的文件,该文件仅在启动时运行(系统表除外,系统表是在服务器上显式创建的)。
DETACH语句
DETACH TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
从服务器中删除表“name”的存在,服务器再次查询后将不知道该表存在。
这不会删除表格的数据或元数据。 在下一次启动服务器时,服务器将读取元数据并再次查找该表。
同样,可以使用ATTACH查询重新连接“detached”表(系统表除外,没有为系统表存储元数据)。
show语句
SHOW CREATE TABLE
--返回单个String类型的“ statement”列,其中包含单个值–用于创建指定对象的CREATE查询。
SHOW CREATE [TEMPORARY] [TABLE|DICTIONARY] [db.]table [INTO OUTFILE filename] [FORMAT format]
SHOW DATABASES
--打印所有数据库的列表。
SHOW DATABASES [LIKE | ILIKE | NOT LIKE '<pattern>'] [LIMIT <N>] [INTO OUTFILE filename] [FORMAT format]
--该语句与以下查询返回结果相同:
SELECT name FROM system.databases [WHERE name LIKE | ILIKE | NOT LIKE '<pattern>'] [LIMIT <N>] [INTO OUTFILE filename] [FORMAT format]
--获取名称中包含符号序列“de”的数据库名称
SHOW DATABASES LIKE '%de%'
┌─name────┐
│ default │
└─────────┘
--以不区分大小写的方式获取数据库名称,名称中包含符号序列“de”
SHOW DATABASES ILIKE '%DE%'
┌─name────┐
│ default │
└─────────┘
--获取名称中不包含符号序列“de”的数据库名称
SHOW DATABASES NOT LIKE '%de%'
┌─name───────────────────────────┐
│ _temporary_and_external_tables │
│ system │
│ test │
│ tutorial │
└────────────────────────────────┘
--从数据库名称获取前两行:
SHOW DATABASES LIMIT 2
┌─name───────────────────────────┐
│ _temporary_and_external_tables │
│ default │
└────────────────────────────────┘
SHOW PROCESSLIST
--输出system.processes表的内容,该表包含当前正在处理的查询列表,但SHOW PROCESSLIST查询除外
--和SELECT * FROM system.processes返回结果相同
SHOW PROCE