2016-12-07 82 views
0

我正在序列化訪問sqlite數據庫。所有線程都使用相同的數據庫句柄。sqlite回滾的原因是什麼?

sqlite3_config(SQLITE_CONFIG_SERIALIZED);

在涉及許多插入語句的事務語句之一中,我正在刪除另一個線程中的行。兩者都試圖修改相同的表格。

我得到的交易是回滾的。我想知道這是否可以成爲回滾的原因。

你能幫我找到問題嗎?提前致謝。

問候, 拉傑夫

回答

1

一個連接有一個事務。 因此,使用多個線程時,應該爲每個線程使用一個連接。

的SQLite的線程模式可以防止數據庫結構本身由偏快轉爲損壞,但是當多個線程試圖做的同時數據庫什麼,他們仍然會互相的干擾數據。

+0

你的意思是說,如果我們試圖從其他線程修改表,它可以使數據庫處於不一致的狀態? – snr

+0

就數據庫本身而言,它將處於一致的狀態(即所有約束都得到保證)。但是,如果您的線程在同一個事務中執行多個事務,或者甚至嘗試執行他們自己的事務,則結果可能對您的程序不正確(如您所見)。 –

+0

你可以讓我知道這個SQLITE_CONFIG_SERIALIZED可以做什麼嗎?我認爲如果啓用此選項,我們無法同時更新數據庫。在開始事務期間,sqlite將會有一個文件句柄鎖定數據庫文件的權利,那麼如何使用此選項進行並行刪除? – snr

相關問題