web-dev-qa-db-ja.com

db2で自動インクリメントする方法

これは簡単だと思いましたが、db2データベースでAUTO_INCREMENTを使用することはできません。私はいくつかの検索を行い、人々は「デフォルトで生成」を使用しているようですが、これは私には機能しません。

それが役立つ場合は、sidを自動インクリメントして作成するテーブルを示します。

  create table student(
      sid integer NOT NULL <auto increment?>
      sname varchar(30),
      PRIMARY KEY (sid)
      );

どんなポインタでも大歓迎です。

33
Matt

あなたが探しているのは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列の比較

54
Ian Bjorhovde

シーケンスオブジェクトを使用して自動インクリメントフィールドを作成する必要があります(このオブジェクトは番号シーケンスを生成します)。

次の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」に設定されます。

6
Matt

「将来安全な」シーケンスを作成するためのいくつかのオプションのパラメーターを追加しました。

CREATE SEQUENCE <NAME>
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 10;
1
noname

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から始まる)

1
Mohd Arshil