IDENTITY列を含む行の挿入

キーワードDEFAULTがIDENTITY列のinsert_clauseとして使用されると、IDENTITY列の値が生成されます。GENERATED BY DEFAULTとGENERATED ALWAYSの両方のスタイルのIDENTITY列のINSERT文を示すいくつかの例を次に示します。

例7-2 IDENTITY列を含む行の挿入

CREATE Table Test_SGSqlInsert2(
    id INTEGER,
    name STRING,
    deptId INTEGER GENERATED ALWAYS AS IDENTITY (CACHE 1),
PRIMARY KEY(id));
INSERT INTO Test_SGSqlInsert2 VALUES (148, 'sally', DEFAULT);
INSERT INTO Test_SGSqlInsert2 VALUES (250, 'joe', DEFAULT);
INSERT INTO Test_SGSqlInsert2 VALUES (346, 'dave', DEFAULT);

上のINSERT文により、次の行が挿入されます。IDENTITY列deptIdに値1、2、および3が生成されます。

148, 'sally', 1
250, 'joe', 2
346, 'dave', 3

ユーザーがIDENTITY GENERATED ALWAYS列に値200を指定したため、次のINSERTでは例外が発生します。

INSERT INTO Test_SGSqlInsert2 VALUES (1, 'joe', 200);

例7-3 IDENTITY列を含む行の挿入

CREATE TABLE Test_SGSqlInsert_Default (
    id INTEGER,
    name STRING,
    deptId INTEGER GENERATED BY DEFAULT AS IDENTITY (
        START WITH 1
        INCREMENT BY 1
        MAXVALUE 100),
PRIMARY KEY (SHARD(deptId), id));
INSERT INTO Test_SGSqlInsert_Default VALUES (100, 'tim', DEFAULT);
INSERT INTO Test_SGSqlInsert_Default VALUES (200, 'dave', 210);
INSERT INTO Test_SGSqlInsert_Default VALUES (300, 'sam', 310);
INSERT INTO Test_SGSqlInsert_Default VALUES (400, 'Jennifer', DEFAULT);
INSERT INTO Test_SGSqlInsert_Default VALUES (500, 'Barbara', 2);

上の文により、データベースに次の行が挿入されます。IDENTITY列がGENERATED BY DEFAULTとして定義されているため、ユーザーが指定した値210、310、および2が受け入れられます。IDENTITY列の値2が重複しています。GENERATED BY DEFAULT IDENTITY列の値の重複がチェックされたり、一意性が強制されることはありません。アプリケーションで重複する値が設定されないようにします。

100, 'tim', 1
200, 'dave', 210
300, 'sam', 310
400, 'Jennifer', 2
500, 'Barbara', 2