代码之家  ›  专栏  ›  技术社区  ›  Ikke

使用触发器自动递增

  •  2
  • Ikke  · 技术社区  · 16 年前

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

    我不知道是否有可能,但我试着将上次使用的id存储在另一个表中,并在插入新记录时使用触发器分配下一个id。

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

    如何根据不同表中的值设置要插入行的字段

    目前的问题是:

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

    这将成功更新值。但现在我需要把这个新值赋给新记录。(新身份证)。

    1 回复  |  直到 16 年前
        1
  •  6
  •   Samuel Neff    16 年前

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