これは簡単だと思いましたが、db2データベースでAUTO_INCREMENTを使用することはできません。私はいくつかの検索を行い、人々は「デフォルトで生成」を使用しているようですが、これは私には機能しません。
それが役立つ場合は、sidを自動インクリメントして作成するテーブルを示します。
create table student(
sid integer NOT NULL <auto increment?>
sname varchar(30),
PRIMARY KEY (sid)
);
どんなポインタでも大歓迎です。
あなたが探しているのはIDENTITY列と呼ばれています:
create table student (
sid integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)
,sname varchar(30)
,PRIMARY KEY (sid)
);
シーケンスはこれを行うための別のオプションですが、特定の状況では 適切なものを決定 する必要があります。詳細については、こちらをお読みください シーケンスとID列の比較 。
シーケンスオブジェクトを使用して自動インクリメントフィールドを作成する必要があります(このオブジェクトは番号シーケンスを生成します)。
次のCREATE SEQUENCE構文を使用します。
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
上記のコードは、seq_personというシーケンスオブジェクトを作成します。このオブジェクトは1で始まり、1ずつ増加します。また、パフォーマンスのために最大10個の値をキャッシュします。キャッシュオプションは、アクセスを高速化するためにメモリに格納されるシーケンス値の数を指定します。
「Persons」テーブルに新しいレコードを挿入するには、nextval関数を使用する必要があります(この関数はseq_personシーケンスから次の値を取得します)。
INSERT INTO Persons (P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
上記のSQLステートメントは、新しいレコードを「Persons」テーブルに挿入します。 「P_Id」列には、seq_personシーケンスの次の番号が割り当てられます。 「FirstName」列は「Lars」に設定され、「LastName」列は「Monsen」に設定されます。
「将来安全な」シーケンスを作成するためのいくつかのオプションのパラメーターを追加しました。
CREATE SEQUENCE <NAME>
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 10;
hiテーブルの作成中に列をAUTO_INCREMENTとして作成できない場合。回避策として、最初に次のテーブルを作成します。
create table student(sid integer NOT NULL sname varchar(30)、PRIMARY KEY(sid));
次に、次を使用して列buを明示的に変更しようとします
テーブルの学生を変更する列のsidセットをGENERATED BY DEFAULT AS IDENTITYに変更する
または
alter table student alter column sid set GENERATED BY DEFAULT AS IDENTITY(100から始まる)