INSERT
名稱
INSERT ― 向表中插入新行
語法
INSERT INTO table [ ( column [, ...] ) ]
{ VALUES ( expression [, ...] ) | SELECT query }
輸入
table
現存表的名稱.
column
表 table 中的列/字段名.
expression
賦予 column 的一個有效表達式或值.
query
一個有效的查詢.請參考 SELECT 語句獲取有效參數的進一步描述.
輸出
INSERT oid 1
如果只插入了一行,返回此信息.oid是被插入行的數字標識.
INSERT 0 #
如果插入了超過一行,返回此信息.# 是插入的行數.
描述
INSERT 允許我們向表中插入新行.我們可以一次插入一行或多行作為查詢結果.目標列表中的列/字段可以按任何順序排列.
在目標列中沒有出現的列/字段將插入缺省值,要么是定義了的 DEFAULT 值或者 NULL。如果向定義為 NOT NULL 的列中插入 NULL 值,Postgres 將拒絕新列。
如果每行的表達式不是正確的數據類型,將試圖進行自動的類型轉換.
要想向表中插入數據,你必須有插入權限,同樣也要有選擇權限用于處理 WHERE 子句里聲明的任何表。
用法
向表 films 里插入一行:
INSERT INTO films VALUES
('UA502','Bananas',105,'1971-07-13','Comedy',INTERVAL '82 minute');
在第二個例子里面省略了字段 date_prod (譯注:原文錯,應為字段 len)因此在它里面將只存儲缺省的 NULL 值:
INSERT INTO films (code, title, did, date_prod, kind)
VALUES ('T_601', 'Yojimbo', 106, DATE '1961-06-16', 'Drama');
向表 distributors 里插入一行;注意只聲明了字段 name ,而沒有聲明的字段 did 將被賦于它的缺省值:
INSERT INTO distributors (name) VALUES ('British Lion');
從表 tmp 中插入幾行到表 films 中:
INSERT INTO films SELECT * FROM tmp;
插入數組(請參考 PostgreSQL用戶手冊 獲取關于數組的更多信息):
-- 創建一個空的 3x3 游戲板來玩圈-和-叉游戲
-- (所有這些查詢創建相同的板屬性)
INSERT INTO tictactoe (game, board[1:3][1:3])
VALUES (1,'{{"","",""},{},{"",""}}');
INSERT INTO tictactoe (game, board[3][3])
VALUES (2,'{}');
INSERT INTO tictactoe (game, board)
VALUES (3,'{{,,},{,,},{,,}}');
兼容性
SQL92
INSERT 語句與 SQL92 完全兼容.可能碰到的關于 query 子句特性的限制在 SELECT 語句中有相關文檔.