2012-06-08 50 views

回答

12

據我所知,沒有專門的sqlite命令來控制鎖定。但是,您可以使用create transaction來讓sqlite鎖定數據庫。例如:

BEGIN IMMEDIATE TRANSACTION; 
... 
COMMIT TRANSACTION; 

BEGIN EXCLUSIVE TRANSACTION; 
... 
COMMIT TRANSACTION; 

如果你看過我聯繫你應該得到一個更好的主意上的區別IMMEDIATE & EXCLUSIVE事務之間的文檔。

可能值得注意的是,sqlite中的鎖適用於整個數據庫,而不僅僅是單個表,與其他sql數據庫中的LOCK TABLE語句不同。

8

SQLite會執行任何鎖定,以便實現您的SQL語句所描述的事務方案。特別是,如果您沒有描述任何內容,那麼您將獲得自動提交行爲,並在每個語句的持續時間內保留一個鎖,然後在語句結束時將其刪除。如果您需要更長時間的交易(通常是真實的!),那麼您可以通過BEGIN TRANSACTION(通常縮寫爲BEGIN)明確要求,並以COMMIT TRANSACTION(或ROLLBACK TRANSACTION)結束。交易處理通常由您的語言界面包裝(因爲這樣可以更容易地將交易的生命週期與代碼塊或方法調用相結合),但在基本級別,這取決於您的語言界面,它可以歸結爲BEGIN/COMMIT/ROLLBACK

總之,你有交易。鎖被用於實現事務。你沒有原始的鎖(這是一件好事,它們比你第一眼看到的要難得多)。