2015-04-03 102 views
-1

我是新來的數據庫,並有一個SQLite數據庫是這樣的:什麼是sqlite數據庫的rowid?

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的id ? SELECT last_insert_rowid()在這裏有什麼功能?

+0

閱讀[文檔】(http://www.sqlite.org/autoinc.html)。 – 2015-04-03 06:24:09

回答

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)的值,然後將其分配給TilesData的id

我們可以通過在第一次插入時指定id,並且看到TilesData的id也匹配強制標識符。

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在瓷磚表是123456。該值用作TilesData的id

select * from TilesData; 

結果:

id  | Tile 
-------------- 
123456 | Stuff