如何在 db2 中进行 AUTO_INCREMENT?
Posted
技术标签:
【中文标题】如何在 db2 中进行 AUTO_INCREMENT?【英文标题】:How to AUTO_INCREMENT in db2? 【发布时间】:2012-11-08 02:46:18 【问题描述】:我认为这很简单,但我似乎无法在我的 db2 数据库中使用 AUTO_INCREMENT。我做了一些搜索,人们似乎在使用“默认生成”,但这对我不起作用。
如果有帮助,这是我要创建的表,其中 sid 自动递增。
create table student(
sid integer NOT NULL <auto increment?>
sname varchar(30),
PRIMARY KEY (sid)
);
任何指针表示赞赏。
【问题讨论】:
【参考方案1】:您要查找的称为 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。
【讨论】:
谢谢伊恩。这就是我开始的地方。我不确定为什么,但无论出于何种原因,此查询的“始终生成”部分都无法识别。我收到缺少正确括号的错误...表明它无法识别关键字。 您运行的是什么版本的 DB2,在什么平台上运行? 您在声明身份序列后缺少逗号 (','
),但它在其他方面适用于 my DB2 部署(我尚未打开日志,不过,所以我现在不能声明主键)。
如果您需要手动向列中插入一个值,您可以将 GENERATED ALWAYS 更改为 GENERATED BY DEFAULT。
@valijon 如果您想成为技术人员,它们实际上并不相同,因为 IDENTITY 是列的属性,就像 AUTO_INCREMENT 一样。 SERIAL 是一种伪类型,它指定列的类型及其属性。【参考方案2】:
您必须使用序列对象创建一个自动递增字段(该对象生成一个数字序列)。
使用以下 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”。
【讨论】:
虽然我承认 DB2 有序列,这是它们的一种用途(如果我没记错的话,自动生成列可能使用相同类型的对象),但 DB2 不是t 在该页面上列出...您是否只是复制了 Oracle 设置?请记住,Oracle 和 DB2 之间有几个 other 很大的差异(取决于版本),因此您不能盲目地复制。 (我认为我在这里发现人们对 w3schools 缺乏信心是有道理的:他们不仅缺少 DB2,还缺少 postgreSQL 和 Derby,所有这些都是常用的......也许比 Access 更多) @Clockwork-Muse - 你是对的,虽然这种结构可以在 db2 中工作,但语法不同。【参考方案3】:嗨,如果您在创建表时仍然无法将列设为 AUTO_INCREMENT。作为一种解决方法,首先创建表:
创建表学生( sid 整数 NOT NULL 名字 varchar(30), 主键 (sid) );
然后显式尝试使用以下内容更改列 bu
alter table student alter column sid set GENERATED BY DEFAULT AS 身份
或者
alter table student alter column sid set GENERATED BY DEFAULT 身份(以 100 开头)
【讨论】:
【参考方案4】:添加了一些用于创建“未来安全”序列的可选参数。
CREATE SEQUENCE <NAME>
START WITH 1
INCREMENT BY 1
NO MAXVALUE
NO CYCLE
CACHE 10;
【讨论】:
以上是关于如何在 db2 中进行 AUTO_INCREMENT?的主要内容,如果未能解决你的问题,请参考以下文章