# sqlite3で外部キー制約を常に有効にする

sqlite3で外部キー制約を設定したテーブルの行を削除しようとした。
制約があるために削除されないことを期待したが、削除されてしまった。
sqlite3では、テーブルに制約を課していても、sqlite3の設定を有効にしないといけないらしい。 そのためのコマンドが以下である。

PRAGMA foreign_keys = ON;

ところが、この設定はsqlite3コマンドでターミナルに入るたびに設定しないといけない。
設定し忘れる。
sqlite3はデフォルトの設定を変えることができる。

man sqlite3の説明のとおり、ホームディレクトリに.sqlitercという名前のファイルを作ればよい。

If  the  file  ~/.sqliterc  exists,  it is processed first.  can be found in the user's home directory, it is read and processed.

~/.sqliterc

PRAGMA foreign_keys = ON;

これでsqlite3の外部キー制約を常に有効にできる。
なお、外部キー制約とは関係ないが、他にもSQLを読みやすくする設定がある。

~/.sqliterc

-- 外部キー制約を有効にする
PRAGMA foreign_keys = ON;

-- SQLの実行結果にカラム名をつける
.headers on

-- カラム名の下に値が配置される
.mode column

-- SQLの実行時間を表示する
.timer on

-- 変更の影響を受けた行を表示する
.changes on