0
我正在序列化訪問sqlite數據庫。所有線程都使用相同的數據庫句柄。sqlite回滾的原因是什麼?
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
在涉及許多插入語句的事務語句之一中,我正在刪除另一個線程中的行。兩者都試圖修改相同的表格。
我得到的交易是回滾的。我想知道這是否可以成爲回滾的原因。
你能幫我找到問題嗎?提前致謝。
問候, 拉傑夫
我正在序列化訪問sqlite數據庫。所有線程都使用相同的數據庫句柄。sqlite回滾的原因是什麼?
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
在涉及許多插入語句的事務語句之一中,我正在刪除另一個線程中的行。兩者都試圖修改相同的表格。
我得到的交易是回滾的。我想知道這是否可以成爲回滾的原因。
你能幫我找到問題嗎?提前致謝。
問候, 拉傑夫
一個連接有一個事務。 因此,使用多個線程時,應該爲每個線程使用一個連接。
的SQLite的線程模式可以防止數據庫結構本身由偏快轉爲損壞,但是當多個線程試圖做的同時數據庫什麼,他們仍然會互相的干擾數據。
你的意思是說,如果我們試圖從其他線程修改表,它可以使數據庫處於不一致的狀態? – snr
就數據庫本身而言,它將處於一致的狀態(即所有約束都得到保證)。但是,如果您的線程在同一個事務中執行多個事務,或者甚至嘗試執行他們自己的事務,則結果可能對您的程序不正確(如您所見)。 –
你可以讓我知道這個SQLITE_CONFIG_SERIALIZED可以做什麼嗎?我認爲如果啓用此選項,我們無法同時更新數據庫。在開始事務期間,sqlite將會有一個文件句柄鎖定數據庫文件的權利,那麼如何使用此選項進行並行刪除? – snr