前の章では、データを保持するためのテーブルやその他の構造の作成方法について説明しました。 いよいよ、テーブルにデータを挿入してみましょう。 本章では、テーブルのデータの挿入、更新、削除の方法について説明します。 また、特定のイベントが起こったときに自動的にデータを変更する方法、すなわちトリガと再書き込みのルールについても紹介します。 そして本章以降において、ずっと見つけられなかったデータをデータベースから抽出する方法について説明します。
テーブルは、作成時にはデータを含んでいません。 データベースを利用価値のあるものにするには、まずデータを挿入する必要があります。 理論的には、データは 1 度に 1 行ずつ挿入されます。 もちろんユーザは複数行に挿入することもできますが、1 度に 1 行未満を挿入することはできません。 列の値が一部しか分かっていない場合でも、1 行全体を作成しなければなりません。
新規の行を作成するには、INSERT コマンドを使用します。 このコマンドでは、テーブル名とテーブルの各列の値を指定する必要があります。 たとえば、Chapter 2 の products テーブルの例で考えてみましょう。
CREATE TABLE products ( product_no integer, name text, price numeric );
この場合、行を挿入するためのコマンドは以下のようになります。
INSERT INTO products VALUES (1, 'Cheese', 9.99);
データ値は、テーブルで列が表示される順序に従ってコンマで区切ってリストします。 通常、データ値はリテラル (定数) ですが、スカラー式も使用できます。
上記の構文には、テーブル内の列の順序を知っていなければならないという難点があります。 これを避けるには、列を明示的にリストする方法があります。 たとえば、以下の 2 つのどちらのコマンドでも上記のコマンドと同等の効果が得られます。
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99); INSERT INTO products (name, price, product_no) VALUES ('Cheese', 9.99, 1);
多くのユーザは常に列名をリストする方法をとっています。
値が分からない列については、省略することができます。 省略した列には、デフォルト値が挿入されます。たとえば、次の例です。
INSERT INTO products (product_no, name) VALUES (1, 'Cheese'); INSERT INTO products VALUES (1, 'Cheese');
後者は PostgreSQL の拡張機能です。 これによって、列には左から順に指定されただけの値が挿入され、残りにはデフォルト値が挿入されます。
明確にするため、列ごと、あるいは行全体についてデフォルト値を明示的に要求することもできます。
INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', DEFAULT); INSERT INTO products DEFAULT VALUES;
Tip: 大量のデータを挿入する"一括ロード"を行う場合は COPY コマンドを検討してください (PostgreSQL 7.3 リファレンスマニュアル を参照)。 INSERT ほどの柔軟性はありませんが、効率的です。