2015-04-03 6 views
-1

Я новичок в базу данных и иметь SQLite базы данных, как это:Что такое rowid базы данных sqlite?

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(?, ?, ?, ?,?) 
INSERT INTO TilesData(id, Tile) VALUES((SELECT last_insert_rowid()), ?) 

Что бы идентификатор плитки и TilesData ? Какова функция SELECT last_insert_rowid() здесь?

+0

Прочитайте [документацию] (http://www.sqlite.org/autoinc.html). –

ответ

1

Я построил свои запросы на обоих 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 
Смежные вопросы