2012-06-08 12 views
5

テーブルに行を挿入または更新する前に明示的なsqliteロックコマンドが見つかりませんでした。 sqliteは独自のロック機構を処理しますか? http://sqlite.org/lockingv3.htmlに記載されているページャモジュールがロック機構を処理します。しかし、ユーザーが明示的にテーブルをロックするために使用できるコマンドがあるかどうかはわかりません。ご意見をお聞かせください。SQLiteの明示的なロック機構

おかげ

答えて

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になります。

要するに、トランザクションがあります。ロックはトランザクションを実装するために使用されます。あなたは生のロックを持っていません(これは良いことです;一見して考えるよりもずっと難しくなります)。

関連する問題