如何在db2中自动递增?

如何在db2中自动递增?,db2,auto-increment,Db2,Auto Increment,我认为这很简单,但我似乎不能在我的db2数据库中使用AUTO_INCREMENT。我做了一些搜索,人们似乎在使用“默认生成”,但这对我不起作用 如果有帮助的话,我想创建一个sid自动递增的表 create table student( sid integer NOT NULL <auto increment?> sname varchar(30), PRIMARY KEY (sid) ); 创建学生表( sid整数不为空 斯奈姆·

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

如果有帮助的话,我想创建一个sid自动递增的表

  create table student(
      sid integer NOT NULL <auto increment?>
      sname varchar(30),
      PRIMARY KEY (sid)
      );
创建学生表(
sid整数不为空
斯奈姆·瓦尔查尔(30岁),
主键(sid)
);

欢迎使用任何指针。

您必须使用sequence对象创建一个自动递增字段(该对象生成一个数字序列)

使用以下创建序列语法:

  CREATE SEQUENCE seq_person
  MINVALUE 1
  START WITH 1
  INCREMENT BY 1
  CACHE 10
上面的代码创建了一个名为seq_person的序列对象,该对象以1开头,将递增1。它还将缓存多达10个性能值。“缓存”选项指定将在内存中存储多少个序列值,以便更快地访问

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


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

您要查找的称为标识列:

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

序列是执行此操作的另一个选项,但您需要针对您的特定情况进行调整。阅读本文了解更多信息。

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

CREATE SEQUENCE <NAME>
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 10;
创建序列
从1开始
增加1
没有最大值
无周期
缓存10;

如果在创建表格时仍无法将列设置为自动增量,则为hi。作为解决方法,首先创建以下表格:

创建表学生( sid整数不为空 斯奈姆·瓦尔查尔(30岁), 主键(sid) );

然后使用以下命令显式地尝试更改bu列

alter table学生alter列sid集默认生成为 身份

默认情况下生成的alter table学生alter列sid集 作为标识(以100开头)


谢谢你,伊恩。这就是我开始的地方。我不知道为什么,但不管出于什么原因,这个查询的“始终生成”部分都无法识别。我得到的错误丢失正确的参数。。。一个指示符,它没有记录关键字。您运行的是什么版本的DB2,在什么平台上?在声明标识序列之后,您缺少了一个逗号(
,“
),但它在我的DB2部署中起作用(不过,我还没有打开日志记录,所以目前无法声明主键)。如果您需要手动向列中插入值,您可以将“始终生成”更改为“默认生成”。@valijon如果您想成为技术人员,它们实际上并不相同,因为标识是列的一个属性,就像自动增量一样。SERIAL是一种伪类型,它同时指定列的类型及其属性。虽然我承认DB2有序列,这是它们的一种用途(如果我没记错的话,auto gen列可能会在封面下使用相同类型的对象),但该页上没有列出DB2。。。您刚才复制了Oracle设置吗?请记住,Oracle和DB2之间还有其他几大区别(取决于版本),所以不能盲目复制。(我认为人们对w3schools缺乏信心在这里是有道理的:他们不仅缺少DB2,而且还缺少postgreSQL和Derby,所有这些都是常用的…可能不仅仅是访问)@Clockwork Muse-你是对的,虽然这种构造在DB2中可以工作,但语法不同。
CREATE SEQUENCE <NAME>
  START WITH 1
  INCREMENT BY 1
  NO MAXVALUE
  NO CYCLE
  CACHE 10;