INSERT

名前

INSERT -- テーブルに新しい行を作成

概要

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

説明

INSERT を使用して、テーブルに新しい行を挿入することができます。 1 度に 1 つの行を挿入することも可能ですし、問い合わせの結果として複数の行を挿入することもできます。

対象リスト内の列はどのような順番でも指定できます。 対象リストに無い各列にはデフォルト値、つまり、宣言されたデフォルト値かNULLが挿入されます。

各列の表現が正しいデータ型でない場合は、自動的に型の強制が行なわれます。

テーブルに追加するためには、そのテーブルに対してINSERT権限を持っている必要があります。 queryを使用して問い合わせを元に行を挿入する場合は、その問い合わせ内で使われる全てのテーブルに対してSELECT権限を持っている必要があります。

パラメータ

table

既存のテーブルの名前です (スキーマ修飾名でも可)。

column

table 内の列名です。

DEFAULT VALUES

全ての列には、そのデフォルト値が設定されます。

expression

column に挿入する有効な式または値です。

DEFAULT

この列には、そのデフォルト値が設定されます。

query

挿入する行を提供する問い合わせ(SELECT文)です。 構文の説明については SELECT 文を参照して下さい。

出力

正常に終了すると、INSERT は以下のようなコマンドタグを返します。

INSERT oid count

countは挿入された行数です。 countが正確に1であり、対象のテーブルがOIDを持つ場合、oid は挿入された行に割り当てられたOID です。 その他の場合、oidは0となります。

filmsテーブルに1つの行を挿入します。

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

この2つめの例では、最後の列lenを省略しています。 したがって、そこにはデフォルト値NULLが入ります。

INSERT INTO films (code, title, did, date_prod, kind)
    VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');

3つめの例では、日付列に対して値を使用するのではなく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');

この例では、tmpテーブルからfilmsテーブルへ複数行を挿入しています。

INSERT INTO films SELECT * FROM tmp;

この例では、配列型の列に挿入しています。

-- 三目並べ用の 3x3 マスのゲーム盤を作成します。
-- (全ての問い合わせは同じboard 属性を作成します。
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,'{{,,},{,,},{,,}}');

互換性

INSERTは標準SQLと完全に互換性があります。 query 句の機能についての考えられる制限は、 SELECT にて記述されています。