首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Firebird autoIncrement问题

Firebird autoIncrement问题
EN

Stack Overflow用户
提问于 2013-02-06 18:51:10
回答 2查看 4.5K关注 0票数 3

我通过以下代码创建了Customers Table:

代码语言:javascript
复制
CREATE TABLE CUSTOMERS (
ID INTEGER DEFAULT 1 NOT NULL,
"NAME" VARCHAR(30) CHARACTER SET UTF8 COLLATE UTF8,
"LASTNAME" VARCHAR(30) CHARACTER SET UTF8 COLLATE UTF8);


ALTER TABLE CUSTOMERS ADD PRIMARY KEY (ID);


SET TERM ^ ;

CREATE TRIGGER BI_CUSTOMERS_ID FOR CUSTOMERS
ACTIVE BEFORE INSERT
POSITION 1
AS
BEGIN
 IF (NEW.ID IS NULL) THEN
  NEW.ID = GEN_ID(CUSTOMERS_ID_GEN, 1);
END^

SET TERM ; ^

但是当我像这样插入第二行时:

代码语言:javascript
复制
insert into Customers(Name,LastName) values('Hamed','Kamrava');

出现以下错误:

代码语言:javascript
复制
Violation of PRIMARY or UNIQUE KEY constraint "INTEG_2" on table "CUSTOMERS".
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 18:56:14

id是一个主键,默认值为1

在第一条记录中,由于您没有显式提到id的值,它插入了1。但是您不能有任何其他包含id = 1的记录,因为id是主键。

使用以下语句:

代码语言:javascript
复制
insert into Customers(id, Name, LastName) values (2, 'Hamed', 'Kamrava');

这应该会插入记录。如果您不想为每一行硬编码ID的值,建议您使用create a sequence,然后在插入过程中使用

代码语言:javascript
复制
insert into Customers(id, Name, LastName) values (nextval('<seq_name>'), <name>, <lastname>);
票数 4
EN

Stack Overflow用户

发布于 2013-02-06 19:01:27

因为您的触发器代码是

代码语言:javascript
复制
 IF (NEW.ID IS NULL) THEN
  NEW.ID = GEN_ID(CUSTOMERS_ID_GEN, 1);

而且,正如@Orangecrush发布的那样,如果您将默认值设置为1,则永远不会生成唯一的id。因此,您应该尝试省略ddl中的默认值。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14727201

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档