13

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

ありがとう

4

2 に答える 2

20

私の知る限り、ロックを制御するための専用の sqlite コマンドはありません。ただし、 create transactionを使用して sqlite にデータベースをロックさせることができます。例えば:

BEGIN IMMEDIATE TRANSACTION;
...
COMMIT TRANSACTION;

BEGIN EXCLUSIVE TRANSACTION;
...
COMMIT TRANSACTION;

IMMEDIATE私がリンクしたドキュメントを読めば、 &EXCLUSIVEトランザクションの違いについてよりよく理解できるはずです。

LOCK TABLE他の SQL データベースのステートメントとは異なり、sqlite のロックは個々のテーブルだけでなくデータベース全体に適用されることに注意してください。

于 2012-06-08T22:13:37.747 に答える
11

SQLite は、SQL ステートメントが記述するトランザクション スキームを実装するために必要なロックをすべて実行します。特に、何も記述しないと、自動コミットの動作が得られ、各ステートメントの実行中はロックが保持され、ステートメントが終了するとロックが解除されます。より長いトランザクションが必要な場合 (多くの場合 true!)、明示的にBEGIN TRANSACTION(しばしば に短縮されます) を要求し、 (または)BEGINで終了します。トランザクションの処理は、言語インターフェースによって頻繁にラップされます (これにより、トランザクションの有効期間をコード ブロックまたはメソッド呼び出しに結び付けて正しく処理することがかなり容易になるため) が、基本レベルでは // になります。COMMIT TRANSACTIONROLLBACK TRANSACTIONBEGINCOMMITROLLBACK

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

于 2012-06-08T22:14:00.243 に答える