如何在db2中使用AUTO_INCREMENT?

Mat*_*att 34 db2 auto-increment

我认为这很简单,但我似乎无法在我的db2数据库中使用AUTO_INCREMENT.我做了一些搜索,人们似乎正在使用"默认生成",但这对我不起作用.

如果它有帮助,这里是我想要创建的表,其中sid是自动递增的.

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

任何指针都表示赞赏.

Ian*_*vde 56

你正在寻找被称为IDENTITY列:

create table student (
   sid integer not null GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)
  ,sname varchar(30)
  ,PRIMARY KEY (sid)
);
Run Code Online (Sandbox Code Playgroud)

序列是执行此操作的另一个选项,但您需要确定哪个适合您的特定情况.阅读本文以获取更多信息,比较序列与标识列.

  • 如果您需要手动将值插入列中,您可以将GENERATED ALWAYS更改为GENERATED BY DEFAULT. (3认同)
  • @valijon如果您想成为技术专家,它们并不是完全一样的,因为IDENTITY是列的属性,就像AUTO_INCREMENT一样。SERIAL是伪类型,它指定列的类型及其属性。 (2认同)

Mat*_*att 6

您必须使用序列对象创建自动增量字段(此对象生成数字序列).

使用以下CREATE SEQUENCE语法:

  CREATE SEQUENCE seq_person
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  CACHE 10
Run Code Online (Sandbox Code Playgroud)

上面的代码创建了一个名为seq_person的序列对象,它以1开头并将递增1.它还将缓存最多10个性能值.cache选项指定将在内存中存储多少个序列值以便更快地访问.

要在"Persons"表中插入新记录,我们必须使用nextval函数(此函数从seq_person序列中检索下一个值):

  INSERT INTO Persons (P_Id,FirstName,LastName)
  VALUES (seq_person.nextval,'Lars','Monsen')
Run Code Online (Sandbox Code Playgroud)

上面的SQL语句会在"Persons"表中插入一条新记录.将从seq_person序列中为"P_Id"列分配下一个数字."FirstName"列将设置为"Lars","LastName"列将设置为"Monsen".