2010-10-22 82 views
2

我有兩個通過外鍵鏈接的表。例如:將SQL數據插入SQLite中的鏈接(外鍵)表中

「CREATE TABLE one(id INTEGER PRIMARY KEY,data REAL,time TEXT NOT NULL DEFAULT(datetime('now')));」 (CREATE TABLE two(id INTEGER PRIMARY KEY,parent INTEGER,CONSTRAINT fc_two FOREIGN KEY(parent)REFERENCES one(id));「

所以我想用嵌入式JOIN做一個INSERT INTO,但我已經嘗試過(然後Google搜索它),顯然它不起作用。我確實找到了一種使用稱爲@@ Identity的方法來做到這一點,但似乎並不適用於SQLite。基本上,我需要:

  1. 將數據插入一個
  2. 使用id的值我剛剛找到該行我只插入一個
  3. 插入數據「ID」的價值分爲兩從一個

1和3很容易,但得到2我需要查詢我剛剛插入的一個。沒有一個數據列(id除外)是唯一的,並且一個唯一組合(所有非id列的集合作爲一個整體是唯一的,而不是任何單獨的組合)不可能可靠地進行查詢。

執行此操作的最佳方式是什麼?

回答

4
SELECT last_insert_rowid() 
+0

不錯,那是行不通的。但是,我現在有另一個問題。在INSERT語句中使用last_insert_rowid()可以正常工作,但是接下來的INSERT語句會失敗。我需要以某種方式「存儲」該臨時值,並在多個INSERT語句中將其用於第二個表中。有關如何做到這一點的任何想法? – 2010-10-23 00:53:46

+0

那麼是什麼阻止你將last_insert_rowid()的值保存到一個變量中,並在其他參數(如selectionArgs)中爲其他插入語句提供? – cement 2010-10-23 14:00:37

+0

問題是,如果我執行SQLite語句並獲取值,然後使用該值執行另一個SQLite語句,它使用兩個語句。我不確定這是否是鎖定問題,因爲從技術上講,單個事務應該是單個SQLite語句,因爲在兩次插入之間,數據庫處於不一致狀態。如果我分解該語句(SQL語句 - > C變量 - > SQL語句),它將分解事務。我想要一種方法來將它全部保存在一個單獨的SQL字符串中......或者不是像這樣分割它的問題嗎? – 2010-10-25 04:18:28