加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite – 使用触发器自动增加

发布时间:2020-12-12 19:09:37 所属栏目:百科 来源:网络整理
导读:我正在尝试解决sqlite中的复合键不允许自动增量的问题. 我不知道它是否可能,但我试图将最后使用的id存储在不同的表中,并在插入新的reccord时使用触发器分配下一个id. 我必须使用复合键,因为单个pk不是唯一的(因为数据库合并). 如何根据不同表中的值设置要插
我正在尝试解决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).

如果使用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,'b');
INSERT INTO product_order VALUES (3,'c');
INSERT INTO product_order VALUES (4,'d');

SELECT * FROM product_order;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读