如何在db2中自动增加?

时间:2012-11-20 03:51:02

标签: db2 auto-increment

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

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

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

任何指针都表示赞赏。

4 个答案:

答案 0 :(得分:53)

您正在寻找被称为IDENTITY列:

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

序列是执行此操作的另一个选项,但您需要针对您的特定情况determine which one is proper。阅读本文以获取更多信息comparing sequences to identity columns

答案 1 :(得分:6)

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

使用以下CREATE SEQUENCE语法:

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

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

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

  INSERT INTO Persons (P_Id,FirstName,LastName)
  VALUES (seq_person.nextval,'Lars','Monsen')

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

答案 2 :(得分:1)

添加了一些可选参数,用于创建“未来安全”序列。

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

答案 3 :(得分:1)

hi如果在创建表时仍无法将列设置为AUTO_INCREMENT。作为第一个创建表的工作:

  

创建表学生(         sid整数NOT NULL         sname varchar(30),         主要关键(sid)         );

然后显式尝试使用以下

更改列bu
  

alter table student alter column sid set GENERATED BY DEFAULT AS   IDENTITY

     

     

alter table student alter column sid set GENERATED BY DEFAULT   AS IDENTITY(从100开始)