2010-03-08 53 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

相關問題