SQLDDL操作
DDL
语
言中修改表结构仅支持
Merge
表引擎、
Distributed
表引擎及
MergeTree
家族的表引
擎
,SQL
中的库、表、字段严格区分大小写。
创建数据库
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster] [ENGINE
= engine(...)]
例子:create database if not exists test_db;
查看数据库
SHOW DATABASES;
删除数据库
DROP DATABASE [IF EXISTS] db [ON CLUSTER cluster]
node1 :)
drop database test_db;
在创建数据库时,在
/var/lib/clickhouse/metadata/目录下会有对应的 库目录和库
.sql
文件,库目录中会存入在当前库下建表的信息,
xx.sql 文件中存入的是 建库的信息
当删除数据库时,
/var/lib/clickhouse/metadata/
目录下对应的库目录和
xx.sql
文件也会被清空。
创建表
#第一种
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = engine
#第二种
CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE
= engine]
#第三种
CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS
SELECT ...
注意:以上普通第一种建表语句是直接创建表。第二种创建表方式可以创建一个与 db2 中
name2
一样结构的表,也可以指定表引擎,也可以不指定,不指定默认与
db2
中的 name2 表引擎一样,不会将表
name2 中的数据填充到对应的新表中。第三种方式可以指定引擎创建一个与
Select
子句的结果相同结构的表,并将
Select
子句的结果填充它
CREATE TABLE IF NOT EXISTS newdb.t1 (
`id` UInt8 DEFAULT 0 COMMENT '编号',
`name` String DEFAULT '无姓名' COMMENT '姓名', `age` UInt8 DEFAULT 18 COMMENT '年龄' )ENGINE = TinyLog
第二种方式创建表:
create table if not exists t2 engine = Memory as
newdb.t_tinylog
第三种方式创建表:
create table if not exists t3 engine = Memory as select *
from newdb.t_tinylog where id >2;
查看表:
show tables;
show tables in default
查看表的定义
show create table XXX
show create table t3
查看表的定义语法
desc XXX
删除表的语法:
DROP [TEMPORARY] TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
修改表的语法:
ALTER
TABLE
[db].name
[ON
CLUSTER
cluster]
ADD|DROP|CLEAR|COMMENT|MODIFY COLUMN ...