SQLiteリファレンス
当サイトはSQLiteに関するSQL文やコマンドのリファレンスサイトです。
HOME > Pから始まるSQL文・コマンド

pragma journal_mode文

現在のジャーナルモードを確認・設定するSQL文

現在のジャーナルモードを確認・設定する方法

現在のジャーナルモードを確認・設定するにはpragma journal_mode文を使用します。

pragma journal_mode文の書き方

pragma journal_mode (設定の確認)
pragma journal_mode = 設定値 (設定の変更)

pragma journal_mode文の使い方

PHPのPDOを使用した例

SQL
<?php
$pdo = new PDO("sqlite:./test.sqlite3");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_TIMEOUT,5);

$stmt = $pdo->query("pragma journal_mode");
$result = $stmt->fetchAll();
print_r($result);
?>

SQLiteのGUIツールを使用した例

SQL
C:\sq>sqlite3 test.sqlite3
sqlite> .headers on
sqlite> .mode column
sqlite> pragma journal_mode;
delete

SQLiteのジャーナルモードについて

SQLite3のジャーナルモードはデフォルトでdeleteに設定されています。これは トランザクション開始時に作成され、更新される前のデータが書き込まれます。その後、commitに成功したり、 rollbackで戻った場合に削除されます。

SQLite3のデフォルトの書き込みが遅いのは、1回の書き込み・更新ごとにこのような処理が走るからです。 データベースへの書き込み中は1トランザクションごとにロック状態になります。

SQLiteのジャーナルモードの変更方法

ジャーナルモードを以下に変更することが出来ます。アプリケーションの種類に応じてデータベースを 分けて使用すると良いと思います。

名前内容
deleteデフォルトのモード。ジャーナルファイルを作成して、commit・rollback後に削除。walモード以外は毎回指定しないとデフォルトのモードであるdeleteに戻る。
truncateジャーナルファイルを削除せず0に戻す。毎回指定しないとデフォルトのモードのdeleteに戻る。
persistdeleteモードの亜種で、コミットしても「-journal」ファイルの内容を削除せずに取っておく。毎回指定しないとdeleteモードに戻る。
memoryジャーナルファイルをメモリ上に保存する。毎回指定しないとデフォルトのモードのdeleteに戻る。
wal-shmファイルと-walファイルを作成して更新内容を書き込む。その間本体データベースには、排他的ロックが発生しない。異なるプロセスでもwalファイルへ書き込む。walファイルのcommit前の読み込みは、書き込んだユーザーだけが読み込める。walファイルが一定以上の書き込み容量になるか、データベースへの接続が終了した時点でデータベースに書き込む。一度指定するとwalモードのままになる。 変更するにはロックが無い状態で(要timeout設定)journal_mode = deleteの設定が必要。書き込みによるロックを減らせる。
offジャーナルファイル機能を使用しない(トランザクションのロールバック不可・信頼性のあるコミット不可)電源やSQLiteが動いているアプリケーション以外の問題でクラッシュするとデータベースが破損する可能性あり。