トランザクション

トランザクションとは、データベースの処理単位のことです。この方法を指定することで、複数ユーザーからの同時アクセス時の挙動を制御できます。

SQLiteではトランザクションの開始を明示しなかった場合には、データを変更するコマンドが実行されるたびに、自動でトランザクションが開始されます。

開始 (BEGIN)

トランザクションを開始します。

BEGIN
  [ DEFERRED | IMMEDIATE | EXCLUSIVE ]  -- トランザクションの種類
  [ TRANSACTION [ TransactionName ] ]   -- トランザクションの名前
※ [ ]で囲まれた項目は省略可能です。

トランザクションを開始し更新を開始すると、トランザクションをロールバックするためのジャーナルファイル (Journal file) が作成されます。このファイルはデータベース名に-journalという名前を付加したファイル名で作成され、トランザクション開始前のデータベースを保存します。

トランザクションの種類
トランザクション ロックの種類
DEFERRED 共有ロック/予約ロック (読み取り時/書き込み時)
IMMEDIATE 予約ロック
EXCLUSIVE 排他ロック
※ SQLiteのバージョン3.0.8より前では、これを明示的に指定できません。バージョン2はEXCLUSIVE、バージョン3.0.0から3.0.7はIMMEDIATEになります。SQLite Release 3.0.8 On 2004-10-11

コミット (COMMIT)

トランザクションを終了し、変更内容を更新します。

COMMIT
  [ TRANSACTION [ TransactionName ] ]   -- トランザクションの名前

コミット時にデータベースがロックされていた場合には、コミットはリトライされます。

ロールバック (ROLLBACK)

トランザクションを終了し、変更内容を破棄します。ロールバックすることで、データベースはトランザクション前の状態に復元されます。

ROLLBACK
  [ TRANSACTION [ TransactionName ] ]   -- トランザクションの名前