40

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

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

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

任意のポインタをいただければ幸いです。

4

4 に答える 4

67

探しているのは 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 列と比較する詳細については、こちらをお読みください。

于 2012-11-20T06:14:53.097 に答える
6

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

次の CREATE SEQUENCE 構文を使用します。

  CREATE SEQUENCE seq_person
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  CACHE 10

上記のコードは、1 から始まり 1 ずつ増加する seq_person という名前のシーケンス オブジェクトを作成します。また、パフォーマンスのために最大 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」に設定されます。

于 2012-11-20T04:02:46.973 に答える
1

こんにちは、テーブルの作成中に列を AUTO_INCREMENT として作成できない場合。回避策として、最初に次のテーブルを作成します。

create table student( sid integer NOT NULL sname varchar(30), PRIMARY KEY (sid) );

次に、次を使用して列 bu を明示的に変更しようとします

テーブルの学生を変更列のSIDを変更するIDENTITYとしてデフォルトでGENERATEDを設定

または

alter table student alter column sid set GENERATED BY DEFAULT AS IDENTITY (100 から開始)

于 2014-08-14T12:20:51.297 に答える