Use trigger for auto-increment

sqlite, triggers

Solution

If you use an `AFTER INSERT` trigger then you can update the newly inserted row, as in the following example.

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;

Problem

I'm trying to solve the problem that composite keys in sqlite don't allow autoincrement. I don't know if it's possible at all, but I was trying to store the last used id in a different table, and use a trigger to assign the next id when inserting a new reccord. I have to use composite keys, because a single pk wouldn't be unique (because of database merging). How can I set a field of the row being inserted based on a value in a different table The query so far is: ``` CREATE TRIGGER pk BEFORE INSERT ON product_order BEGIN UPDATE auto_increment SET value = value + 1 WHERE `table_name` = "product_order"; END ``` This successfully updates the value. But now I need to assign that new value to the new record. (new.id).

Original source