当前位置:  开发笔记 > 数据库 > 正文

使用触发器进行自动增量

如何解决《使用触发器进行自动增量》经验,为你挑选了1个好方法。

我正在尝试解决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).



1> Samuel Neff..:

如果使用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;

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有