0
假設我有兩個Perl腳本連接到同一個SQLite數據庫。如果其中一個腳本正在寫入數據庫,另一個腳本也嘗試寫入數據庫,第二個腳本連接是否會斷開連接?或者將它的輸入存儲在某個SQLite緩存中,並且在第一個腳本的寫入完成後,SQLite最終會提交寫入操作?從Perl向SQLite多次寫入
我不想讓我的第二個腳本連接死掉,因爲SQLIte因爲第一個腳本的寫入而鎖定了數據庫。這兩個腳本寫入數據庫會發生什麼?
謝謝
假設我有兩個Perl腳本連接到同一個SQLite數據庫。如果其中一個腳本正在寫入數據庫,另一個腳本也嘗試寫入數據庫,第二個腳本連接是否會斷開連接?或者將它的輸入存儲在某個SQLite緩存中,並且在第一個腳本的寫入完成後,SQLite最終會提交寫入操作?從Perl向SQLite多次寫入
我不想讓我的第二個腳本連接死掉,因爲SQLIte因爲第一個腳本的寫入而鎖定了數據庫。這兩個腳本寫入數據庫會發生什麼?
謝謝
你不能。 SQLite不允許併發寫入。
要寫入到數據庫中,進程必須首先獲取共享鎖如上(可能回滾不完全的變化,如果有 熱軸頸)描述 。在獲得SHARED鎖後,必須獲取一個保留鎖定 。
保留鎖意味着進程正在計劃在將來的某個時間寫入 數據庫文件,但目前只有 正在從文件中讀取。雖然多個SHARED鎖可以與一個單獨的 保留鎖共存,但一次只能有一個保留鎖 。 RESERVED與PENDING的不同之處在於,當有一個保留鎖時,可以獲取新的SHARED鎖 。
如果你的應用程序不是在繁重的負載下,只需將這個寫入'try/catch'並重試幾次就可以解決所有的問題。 – choroba
我想這個評論是針對這個問題的。無論如何,我寧願同步訪問。 – m0skit0