giải pháp Herman của làm việc cho tôi, nhưng ...
đã cho tôi lẫn lộn một chút. Tôi bao gồm bản demo 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, phím tăng tự động và sử dụng hàm last_insert_rowid()
để nhận 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 nhấ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 thông báo cuối cùng với 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;
sqlite không hỗ trợ điều này. –