SQLite の IMMEDIATE EXCLUSIVE DEFERRED トランザクションの違い2021年06月15日 11時41分23秒

SQLite の トランザクションに説明されている。MySQL や PostgreSQL のトランザクションとは若干異なっている。SQLite には IMMEDIATE、 EXCLUSIVE、 DEFFERED トランザクションがあり、BEGIN TRANSACTION と共に、その都度指定することが出来る。

IMMEDIATE と EXCLUSIVE は BEGIN IMMEDIATE、BEGIN EXCLUSIVE と打った時にトランザクションが始まる。コマンドが終了した時点で、既にデータベースの排他処理は始まっている。IMMEDIATE と EXCLUSIVE の違いは、トランザクション中に、他のセッションに読み取りを許可するかどうか。EXCLUSIVE は他のセッションの読み取りを許可しない。

DEFERRED の説明に移る前に、SQLite のロックの種類に付いて触れる必要がある。ロックには読み出しロックと、書き込みロックの二種類があり、読み出しロックは複数のセッションが同時に開始できるが、書き込みロックを開始できるのは一セッションのみになる。

なお、IMMEDIATE も EXCLUSIVE も書き込みロックを取得する。EXCLUSIVE はそれに加えて、他のセッションからの読み出しも禁止する。

次回