我认为这很简单,但我似乎无法在我的db2数据库中使用AUTO_INCREMENT。我做了一些搜索,人们似乎正在使用“默认生成”,但这对我不起作用。
如果有帮助,这里是我想要创建的表,其中sid是自动递增的。
create table student(
sid integer NOT NULL <auto increment?>
sname varchar(30),
PRIMARY KEY (sid)
);
任何指针都表示赞赏。
答案 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) );
然后显式尝试使用以下
更改列bualter table student alter column sid set GENERATED BY DEFAULT AS IDENTITY
或
alter table student alter column sid set GENERATED BY DEFAULT AS IDENTITY(从100开始)