INSERT

Name

INSERT -- 在資料表中建立新行

Synopsis

INSERT INTO table [ ( column [, ...] ) ]
    { DEFAULT VALUES | VALUES ( { expression | DEFAULT } [, ...] ) | query }

描述

INSERT 向資料表中插入新行。 我們可以一次插入用值資料表達式聲明的一行或者一個查詢結果資料表現出來的多個行。

目標列資料表中的列/字串可以按任何順序排列。 如果完全沒有列出任何字串名,那麼預設是全部字串,順序是按照資料表聲明的時候的順序; 如果 VALUES 子句或者 query 裡面只提供了 N 個字串,那麼就是頭 N 個字串。 VALUES 子句或者 query 提供的數值是以從左到右的方式與明確或者隱含的字串列資料表關聯的。

每個沒有在明確或者隱含的字串列資料表眾出現的字串都將填充預設值, 如果有聲明的預設值則用聲明的那個,如果沒有則用 null。

如果每行的資料表達式不是正確的資料類型,系統將試圖進行自動的類型轉換。

要想向資料表中插入資料,您必須有 INSERT 權限, 如果您使用了 query 子句插入來自查詢裡的資料行, 您還需要擁有在查詢裡使用的資料表的 SELECT 權限。

參數

table

現存資料表的名稱(可以有模式修飾)。

column

資料表 table 中的字串名。 必要時,字串名可以有子字串名或者數組下標修飾。(向一個復合類型中的某些字串插入資料的話,其它字串是空。)

DEFAULT VALUES

所有字串都會用它們的預設值填充。

expression

賦予對應的 column 的一個有效資料表達式或值。

DEFAULT

對應的 column 將被它的預設值填充。

query

一個查詢(SELECT 語句),它提供插入的資料行。 請參考 SELECT 語句獲取語法描述。

輸出

成功完成後,一條 INSERT 命令返回一個下面形式的命令標籤

INSERT oid count

count 是插入的行數。 如果 count 正好是一,並且目標資料表有 OID, 那麼 oid 是賦予插入行的 OID。 否則 oid 是零。

例子

向資料表 films 裡插入一行:

INSERT INTO films VALUES
    ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minute');

在這個個例子裡面省略了字串 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 minute');
INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');

插入一行完全由預設值組成的資料行:

INSERT INTO films DEFAULT VALUES;

從資料表 tmp 中插入幾行到資料表 films 中, 字串佈局與 films 相同:

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';

插入數組:

-- 建立一個空的 3x3 遊戲板來玩圈-和-叉遊戲
-- (這些查詢建立相同的板屬性)
INSERT INTO tictactoe (game, board[1:3][1:3])
    VALUES (1,'{{"","",""},{"","",""},{"","",""}}');
INSERT INTO tictactoe (game, board[3][3])
    VALUES (2,'{}');
    VALUES (2,'{{,,},{,,},{,,}}');

相容性

INSERT 語句與 SQL 標準兼容。 不過,省略字串名列資料表,但是並非所有字串都從 VALUES 子句或者 query 填充的這種用法是標準不允許的。

可能碰到的關於 query 子句特性的限制在 SELECT. 語句中有相關文件。