第5章 SQL語法

5.1 CREATE

5.1.1 CREATE DATABASE

用于創(chuàng)建指定名稱的數(shù)據(jù)庫,語法如下:

CREATE DATABASE [IF NOT EXISTS] db_name

如果查詢中存在IF NOT EXISTS,則當(dāng)數(shù)據(jù)庫已經(jīng)存在時(shí),該查詢不會(huì)返回任何錯(cuò)誤。

:) create database test;

Ok.

0 rows in set. Elapsed: 0.018 sec.

5.1.2 CREATE TABLE

對(duì)于創(chuàng)建表,語法如下:

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

DEFAULT expr – 默認(rèn)值,用法與SQL類似。
MATERIALIZED expr – 物化表達(dá)式,被該表達(dá)式指定的列不能被INSERT,因?yàn)樗偸潜挥?jì)算出來的。 對(duì)于INSERT而言,不需要考慮這些列。 另外,在SELECT查詢中如果包含星號(hào),此列不會(huì)被查詢。
ALIAS expr – 別名。
有三種方式創(chuàng)建表:
1)直接創(chuàng)建

:) create table t1(id UInt16,name String) engine=TinyLog

2)創(chuàng)建一個(gè)與其他表具有相同結(jié)構(gòu)的表

CREATE TABLE [IF NOT EXISTS] [db.]table_name AS [db2.]name2 [ENGINE = engine]

可以對(duì)其指定不同的表引擎聲明。如果沒有表引擎聲明,則創(chuàng)建的表將與db2.name2使用相同的表引擎。

:) create table t2 as t1 engine=Memory

:) desc t2

DESCRIBE TABLE t2

┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ id   │ UInt16 │              │                    │
│ name   │ String │              │                    │
└──────┴────────┴──────────────┴────────────────────┘

3)使用指定的引擎創(chuàng)建一個(gè)與SELECT子句的結(jié)果具有相同結(jié)構(gòu)的表,并使用SELECT子句的結(jié)果填充它。
語法:

CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE = engine AS SELECT ...

實(shí)例:
先在t2中插入幾條數(shù)據(jù)

:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')

:) create table t3 engine=TinyLog as select * from t1
:) select * from t3
┌─id─┬─name─────┐
│  1 │ zhangsan │
│  2 │ lisi     │
│  3 │ wangwu   │
└────┴──────────┘

5.2 INSERT INTO

主要用于向表中添加數(shù)據(jù),基本格式如下:
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13), (v21, v22, v23), ...
實(shí)例:

:) insert into t1 values(1,'zhangsan'),(2,'lisi'),(3,'wangwu')

還可以使用select來寫入數(shù)據(jù):
INSERT INTO [db.]table [(c1, c2, c3)] SELECT ...
實(shí)例:

:) insert into t2 select * from t3
:) select * from t2

┌─id─┬─name─────┐
│  1 │ zhangsan │
│  2 │ lisi     │
│  3 │ wangwu   │
└────┴──────────┘

ClickHouse不支持的修改數(shù)據(jù)的查詢:UPDATE, DELETE, REPLACE, MERGE, UPSERT, INSERT UPDATE。

5.3 ALTER

ALTER只支持MergeTree系列,Merge和Distributed引擎的表,基本語法:
ALTER TABLE [db].name [ON CLUSTER cluster] ADD|DROP|MODIFY COLUMN ...
參數(shù)解析:
ADD COLUMN – 向表中添加新列
DROP COLUMN – 在表中刪除列
MODIFY COLUMN – 更改列的類型
案例演示:
1)創(chuàng)建一個(gè)MergerTree引擎的表

create table mt_table (date  Date, id UInt8, name String) ENGINE=MergeTree(date, (id, name), 8192);

2)向表中插入一些值

insert into mt_table values ('2019-05-01', 1, 'zhangsan');
insert into mt_table values ('2019-06-01', 2, 'lisi');
insert into mt_table values ('2019-05-03', 3, 'wangwu');

3)在末尾添加一個(gè)新列age

:)alter table mt_table add column age UInt8
:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date   │              │                    │
│ id   │ UInt8  │              │                    │
│ name │ String │              │                    │
│ age  │ UInt8  │              │                    │
└──────┴────────┴──────────────┴────────────────────┘
:) select * from mt_table
┌───────date─┬─id─┬─name─┬─age─┐
│ 2019-06-01 │  2 │ lisi │   0 │
└────────────┴────┴──────┴─────┘
┌───────date─┬─id─┬─name─────┬─age─┐
│ 2019-05-01 │  1 │ zhangsan │   0 │
│ 2019-05-03 │  3 │ wangwu   │   0 │
└────────────┴────┴──────────┴─────┘

4)更改age列的類型

:)alter table mt_table modify column age UInt16
:)desc mt_table

┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date   │              │                    │
│ id   │ UInt8  │              │                    │
│ name │ String │              │                    │
│ age  │ UInt16 │              │                    │
└──────┴────────┴──────────────┴────────────────────┘

5)刪除剛才創(chuàng)建的age列

:)alter table mt_table drop column age
:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date   │              │                    │
│ id   │ UInt8  │              │                    │
│ name │ String │              │                    │
└──────┴────────┴──────────────┴────────────────────┘

5.4 DESCRIBE TABLE

查看表結(jié)構(gòu)

:)desc mt_table
┌─name─┬─type───┬─default_type─┬─default_expression─┐
│ date │ Date   │              │                    │
│ id   │ UInt8  │              │                    │
│ name │ String │              │                    │
└──────┴────────┴──────────────┴────────────────────┘

5.5 CHECK TABLE

檢查表中的數(shù)據(jù)是否損壞,他會(huì)返回兩種結(jié)果:
0 – 數(shù)據(jù)已損壞
1 – 數(shù)據(jù)完整
該命令只支持Log,TinyLog和StripeLog引擎。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容