Я построил свои запросы на обоих SQLFiddle (легко показать вам результаты) и в локальной SQLite инстанции (для подтверждения того, что SQLite (SQL.js) ведет себя так же, как локальный экземпляр) с помощью следующего сценария:
CREATE TABLE IF NOT EXISTS Tiles (id INTEGER NOT NULL PRIMARY KEY, X INTEGER NOT NULL, Y INTEGER NOT NULL, Zoom INTEGER NOT NULL, Type INTEGER NOT NULL,Date TEXT);
CREATE TABLE IF NOT EXISTS TilesData (id INTEGER NOT NULL PRIMARY KEY CONSTRAINT fk_Tiles_id REFERENCES Tiles(id) ON DELETE CASCADE, Tile BLOB NULL);
INSERT INTO Tiles(X, Y, Zoom, Type,Date) VALUES(1, 2, 3, 4, 'Date');
INSERT INTO TilesData(id, Tile) VALUES((SELECT last_insert_rowid()), 'Stuff');
select * from Tiles;
select * from TilesData;
В обоих случаях id
в обеих таблицах: 1
.
Цель select last_insert_rowid()
заключается в определении того, что ROWID является последней успешной вставки. В вашем примере он возвращает значение из запроса INSERT INTO Tiles
(1
), а затем назначает его id
TilesData.
Мы можем demonstrate это работает, указав id
в вашей первой вставке и видя, что id
TilesData также соответствует принудительному идентификатору.
INSERT INTO Tiles(id, X, Y, Zoom, Type,Date) VALUES(123456, 10, 2, 3, 4, 'Date');
INSERT INTO TilesData(id, Tile) VALUES((SELECT last_insert_rowid()), 'Stuff');
В этом примере я принуждая id
в таблице Tiles быть 123456
. Это значение используется как id
для TilesData.
select * from TilesData;
Результаты в:
id | Tile
--------------
123456 | Stuff
Прочитайте [документацию] (http://www.sqlite.org/autoinc.html). –