INSERT INTO 語句主要用于向(xiang)系統中添加數據(ju)。
查詢的基本格式:
INSERT INTO [db.]table [(c1, c2, c3)] VALUES (v11, v12, v13),(v21, v22, v23),...
您可以在查詢中指定要插入的列的列表,如:[(c1, c2, c3)]。
例如,考慮該表:
SHOW CREATE insert_select_testtable;
CREATE TABLE insert_select_testtable
(
`a` Int8,
`b` String,
`c` Int8
)
ENGINE = MergeTree()
ORDER BY a
INSERT INTO insert_select_testtable (*) VALUES (1,'a',1);
如果(guo)要在除了'b'列(lie)(lie)以外(wai)的(de)所有列(lie)(lie)中(zhong)插入數據,您需(xu)要傳遞和括(kuo)號中(zhong)選擇的(de)列(lie)(lie)數一樣多的(de)值:
INSERT INTO insert_select_testtable (*EXCEPT(b)) Values(2,2);
SELECT * FROM insert_select_testtable;
┌─a─┬─b─┬─c─┐
│ 2 │ │ 2 │
└───┴───┴───┘
┌─a─┬─b─┬─c─┐
│ 1 │ a │ 1 │
└───┴───┴───┘
在這個示例中,我們看到插入的第二行的 a和 c列的值由傳遞的值填充,而 b列由默認值填充。
對于存在(zai)于表結(jie)構中(zhong)但不存在(zai)于插入列表中(zhong)的(de)列,它們將會按(an)照如下(xia)方(fang)式填充數據:
- 如果存在
DEFAULT表達式,根據DEFAULT表達式計算被填充的值。 - 如果沒有定義
DEFAULT表達式,則填充零或空字符串。
如果 strict_insert_defaults=1,你必須在查詢中列出所有沒有定義 DEFAULT表達式的列。
數據可以以云數據庫ClickHouse支(zhi)持的(de)任(ren)何(he)輸入(ru)輸出格(ge)式(shi)傳(chuan)遞給INSERT。格(ge)式(shi)的(de)名稱必須(xu)顯(xian)示的(de)指定在(zai)查詢中:
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT format_name data_set
例如,下面(mian)(mian)的(de)(de)查詢所(suo)使用的(de)(de)輸入(ru)格式(shi)就與上面(mian)(mian)INSERT … VALUES的(de)(de)中(zhong)使用的(de)(de)輸入(ru)格式(shi)相同:
INSERT INTO [db.]table [(c1, c2, c3)] FORMAT Values(v11, v12, v13),(v21, v22, v23),...
云(yun)數(shu)據(ju)(ju)庫ClickHouse會清除數(shu)據(ju)(ju)前所有的空(kong)白字符(fu)與一(yi)個換行(xing)符(fu)(如(ru)果有換行(xing)符(fu)的話)。所以在(zai)進(jin)行(xing)查詢時,我們建議您將(jiang)數(shu)據(ju)(ju)放入(ru)(ru)到輸入(ru)(ru)輸出格式名稱后的新的一(yi)行(xing)中去(如(ru)果數(shu)據(ju)(ju)是以空(kong)白字符(fu)開始的,這將(jiang)非常重要(yao))。
示例:
INSERT INTO t FORMAT TabSeparated
11 Hello, world!
22 Qwerty