我通过以下代码创建了Customers Table:
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 ; ^但是当我像这样插入第二行时:
insert into Customers(Name,LastName) values('Hamed','Kamrava');出现以下错误:
Violation of PRIMARY or UNIQUE KEY constraint "INTEG_2" on table "CUSTOMERS".发布于 2013-02-06 18:56:14
id是一个主键,默认值为1。
在第一条记录中,由于您没有显式提到id的值,它插入了1。但是您不能有任何其他包含id = 1的记录,因为id是主键。
使用以下语句:
insert into Customers(id, Name, LastName) values (2, 'Hamed', 'Kamrava');这应该会插入记录。如果您不想为每一行硬编码ID的值,建议您使用create a sequence,然后在插入过程中使用
insert into Customers(id, Name, LastName) values (nextval('<seq_name>'), <name>, <lastname>);发布于 2013-02-06 19:01:27
因为您的触发器代码是
IF (NEW.ID IS NULL) THEN
NEW.ID = GEN_ID(CUSTOMERS_ID_GEN, 1);而且,正如@Orangecrush发布的那样,如果您将默认值设置为1,则永远不会生成唯一的id。因此,您应该尝试省略ddl中的默认值。
https://stackoverflow.com/questions/14727201
复制相似问题