Giải pháp của Herman có hiệu quả với tôi, nhưng giải pháp của tôi ...
đã khiến tôi bị xáo trộn một chút. Tôi bao gồm bản demo mà tôi đã làm việc dựa trên câu trả lời của anh ấy. Các tính năng bổ sung trong câu trả lời của tôi bao gồm hỗ trợ khóa ngoại, khóa tăng tự động và sử dụng last_insert_rowid()
chức năng lấy khóa được tạo tự động cuối cùng trong giao dịch.
Nhu cầu của tôi về thông tin này xuất hiện khi tôi thực hiện một giao dịch yêu cầu ba khóa ngoại nhưng tôi chỉ có thể nhận được khóa cuối cùng last_insert_rowid()
.
PRAGMA foreign_keys = ON; -- sqlite foreign key support is off by default
PRAGMA temp_store = 2; -- store temp table in memory, not on disk
CREATE TABLE Foo(
Thing1 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
);
CREATE TABLE Bar(
Thing2 INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
FOREIGN KEY(Thing2) REFERENCES Foo(Thing1)
);
BEGIN TRANSACTION;
CREATE TEMP TABLE _Variables(Key TEXT, Value INTEGER);
INSERT INTO Foo(Thing1)
VALUES(2);
INSERT INTO _Variables(Key, Value)
VALUES('FooThing', last_insert_rowid());
INSERT INTO Bar(Thing2)
VALUES((SELECT Value FROM _Variables WHERE Key = 'FooThing'));
DROP TABLE _Variables;
END TRANSACTION;