?
本文檔使用 PHP中文網手冊 發(fā)布
INSERT INTO table [ ( column [, ...] ) ] { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) [, ...] | query } [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
INSERT向表中插入新行??梢砸淮尾迦胗弥当磉_式聲明的一行或者 一個查詢結果表現出來的零行或多個行。
目標列表中的列/字段可以按任何順序排列。如果完全沒有列出任何字段名,那么缺省是全部字段, 順序是按照表聲明的時候的順序;如果VALUES子句或者query 里面只提供了N個字段,那么就是頭N個字段。 VALUES子句或者query提供的數值是以從左到右的方式與明確 或者隱含的字段列表關聯的。
每個沒有在明確或者隱含的字段列表中出現的字段都將填充缺省值,如果有聲明的缺省值則用 聲明的那個,如果沒有則用 NULL 。
如果每行的表達式不是正確的數據類型,系統將試圖進行自動的類型轉換。
可選的RETURNING子句將導致INSERT返回實際插入的行,它主要用于 獲取缺省的計算值(比如序列值),不過,任何使用該表字段的表達式都是允許的。 RETURNING列表的語法都與SELECT的輸出列表相同。
為了對表執(zhí)行插入操作您必須對該表有INSERT權限。若一個 列列表被執(zhí)行,您只需要對列出的列有INSERT權限。使用 RETURNING子句需要在RETURNING中提到的所有列上有 SELECT權限。如果您使用query 子句來從一個查詢中插入行,您當然需要對查詢中用到的任意表或者列有 SELECT權限。
現存表的名稱(可以有模式修飾)
表table中的字段名。必要時, 字段名可以有子字段名或者數組下標修飾。向一個復合類型中的某些字段插入數據的話, 其它字段將是 NULL 。
所有字段都會用它們的缺省值填充
賦予對應的column的一個有效表達式或值
對應的column將被它的缺省值填充
一個查詢(SELECT語句),它提供插入的數據行。請參考 SELECT語句獲取語法描述。
INSERT命令在每一行都被插入之后用于計算輸出結果的表達式。 該表達式可以使用table的任意字段。 可以使用*返回被插入行的所有字段。
一個字段的輸出名稱
成功完成后,一條INSERT命令返回一個下面形式的命令標簽
INSERT oid count
count是插入的行數。如果 count正好是一,并且目標表有 OID,那么oid 是賦予插入行的OID。否則oid 是零。
如果INSERT命令包含RETURNING子句,其結果將和一個 SELECT語句相同,包含那些基于該命令實際插入的行計算的、定義在 RETURNING列表中的字段的值。
向表films里插入單獨一行:
INSERT INTO films VALUES ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');
在這個例子里面省略了字段len,因此在它里面將存儲缺省值:
INSERT INTO films (code, title, did, date_prod, kind) VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
在這個例子里,用DEFAULT子句作為日期字段,而不是聲明一個數值:
INSERT INTO films VALUES ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes'); INSERT INTO films (code, title, did, date_prod, kind) VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');
插入一行完全由缺省值組成的數據行:
INSERT INTO films DEFAULT VALUES;
使用多行VALUES語法插入多行:
INSERT INTO films (code, title, did, date_prod, kind) VALUES ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'), ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
從表tmp_films中插入幾行到表films中, 字段布局與films相同:
INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
插入數組:
-- Create an empty 3x3 gameboard for noughts-and-crosses INSERT INTO tictactoe (game, board[1:3][1:3]) VALUES (1, '{{" "," "," "},{" "," "," "},{" "," "," "}}'); -- The subscripts in the above example aren't really needed INSERT INTO tictactoe (game, board) VALUES (2, '{{X," "," "},{" ",O," "},{" ",X," "}}');
向distributors表插入一個單獨的行,并返回由 DEFAULT子句生成的序列值:
INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets') RETURNING did;
INSERT語句與 SQL 標準兼容。但RETURNING子句是 PostgreSQL擴展。同樣,省略字段名列表,但是并非所 有字段都從VALUES子句或者query填充的這種用法是標 準不允許的。
可能碰到的關于query子句特性的限制在 SELECT語句中有相關文檔。