2010-03-08 56 views
2

我试图解决sqlite中的组合键不允许自动增量的问题。使用触发器自动增量

我不知道它是否有可能,但我试图将最后使用的id存储在不同的表中,并在插入新的reccord时使用触发器来分配下一个id。

我必须使用复合键,因为单个pk不会是唯一的(因为数据库合并)。

如何设置该行的字段插入基于值在不同的表

查询迄今:

CREATE TRIGGER pk BEFORE INSERT ON product_order 
BEGIN 
    UPDATE auto_increment SET value = value + 1 WHERE `table_name` = "product_order"; 
END 

这成功地更新该值。但现在我需要将这个新值分配给新记录。 (new.id)。

回答

5

如果您使用AFTER INSERT触发器,则可以更新新插入的行,如下例所示。

CREATE TABLE auto_increment (value INT, table_name TEXT); 
INSERT INTO auto_increment VALUES (0, 'product_order'); 

CREATE TABLE product_order (ID1 INT, ID2 INT, name TEXT); 

CREATE TRIGGER pk AFTER INSERT ON product_order 
BEGIN 

    UPDATE auto_increment 
    SET  value = value + 1 
    WHERE table_name = 'product_order'; 

    UPDATE product_order 
    SET  ID2 = (
       SELECT value 
       FROM auto_increment 
       WHERE table_name = 'product_order') 
    WHERE ROWID = new.ROWID; 
END; 

INSERT INTO product_order VALUES (1, NULL, 'a'); 
INSERT INTO product_order VALUES (2, NULL, 'b'); 
INSERT INTO product_order VALUES (3, NULL, 'c'); 
INSERT INTO product_order VALUES (4, NULL, 'd'); 

SELECT * FROM product_order; 
+0

This Works,thanks – Ikke 2010-03-09 09:46:30

相关问题