Решение Германа сработало для меня, но ...
меня немного перепутал.Я включил демонстрацию, которую я разработал, основываясь на его ответе.Дополнительные функции в моем ответе включают поддержку внешнего ключа, автоинкрементные ключи и использование функции last_insert_rowid()
для получения последнего автоматически сгенерированного ключа в транзакции.
Мне понадобилась эта информация, когда я нажалтранзакция, которая требовала три внешних ключа, но я мог получить только последний с 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;