超電磁砲でデータベース(SQLite の設定)

このままでは SQLite を起動するたびに初期設定することになり手間がかかる。起動時に設定を自動読み込みする方法について調べたので、ここでまとめておく。
(追記)動作確認の結果外部キーの設定をここでしても無効でしたので本文中から削除しました。(2022.11.9)

設定内容

今回、設定内容として想定するのは以下の3行。

.mode column
.headers on
.open railgun.db

1行目は表示の仕方の設定で、デフォルトでは list になっている。column を推奨する人が多いようだが、個人的には tabs を利用することもある。HTML 形式で結果が欲しい時は .mode html とする。2行目はヘッダーを表示するための設定である。現在の設定は .show とすることで表示される。3行目はデータベース railgun.db と接続することを意味する。他のデータベースも利用する可能性があるなら外して、起動時に設定した方が良いだろう。なお接続中のデータベースと切断するコマンドは見つからなかった。.exit や .quit も試したが、プログラムが終了してしまった。.help でコマンド一覧を見たが、それらしきコマンドは見つからなかった。

設定ファイル

自動化するためには、上の2行を書いた .sqliterc という名前のファイルを作成する。動作確認は Windows で行った。ドットで始まるファイル名がいかにも Unix 風でトラブルが生じそうに感じて嫌だったが、メモ帳でファイルを作成したら、拡張子 .txt が追加されるくらいの煩わしさで済んだ。

.sqliterc の置き場所はユーザーフォルダである。私の場合は C:\ユーザー\tamaki となる。データベースは sqlite3.exe と同じフォルダに作成されるので、同じフォルダに置いてみたが反映されなかった。

テーブルの作成

このシリーズで使用しているテーブル STATUS, AFF の作成コマンドを記載しておく。SQLite の画面にコピペすれば良い。存在するテーブル一覧を見るには .tables とする。また、うっかりデータを2重登録するなどして、やり直したい場合はテーブルを削除すればよい。テーブル削除の命令は DROP TABLE STATUS ; のように DROP TABLE を使う。

CREATE TABLE STATUS (
 NAME TEXT PRIMARY KEY,
 LEVEL INTEGER,
 SKILL TEXT,
 CHECK( 0 <= LEVEL ),
 CHECK( 5 >= LEVEL )
) ;

INSERT INTO STATUS VALUES ( '御坂美琴', 5, 'レールガン' ) ;
INSERT INTO STATUS VALUES ( '上条当麻', 0, 'イマジンブレイカー' ) ;
INSERT INTO STATUS VALUES ( '白井黒子', 4, 'テレポート' ) ;
INSERT INTO STATUS VALUES ( '初春飾利', 1, 'サーマルハンド' ) ;
INSERT INTO STATUS VALUES ( '佐天涙子', 0, 'エアロハンド' ) ;
INSERT INTO STATUS VALUES ( '固法美偉', 3, 'クレアボイアンス' ) ;
INSERT INTO STATUS VALUES ( '婚后光子', 4, 'エアロハンド' ) ;
INSERT INTO STATUS VALUES ( '泡浮万彬', 3, 'フロートダイヤル' ) ;
INSERT INTO STATUS VALUES ( '湾内絹保', 3, 'ハイドロハンド' ) ;
INSERT INTO STATUS VALUES ( '吹寄制理', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '土御門元春', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '土御門舞夏', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '一方通行', 5, 'アクセラレータ' ) ;
INSERT INTO STATUS VALUES ( '打ち止め', 3, 'レディオノイズ' ) ;
INSERT INTO STATUS VALUES ( '麦野沈利', 5, 'メルトダウナー' ) ;
INSERT INTO STATUS VALUES ( '絹旗最愛', 4, 'オフェンスアーマー' ) ;
INSERT INTO STATUS VALUES ( 'フレンダ', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '滝壺理后', 4, 'AIMストーカー' ) ;
INSERT INTO STATUS VALUES ( '浜面仕上', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '食蜂操祈', 5, 'メンタルアウト' ) ;
INSERT INTO STATUS VALUES ( '弓箭入鹿', 4, 'ウェイブコンダクター' ) ;
INSERT INTO STATUS VALUES ( '帆風潤子', 4, 'ランペイジドレス' ) ;
INSERT INTO STATUS VALUES ( '口囃子早鳥', 3, 'テレパス' ) ;
INSERT INTO STATUS VALUES ( '牧上小牧', 3, NULL ) ;
INSERT INTO STATUS VALUES ( '海原光貴', 4, 'テレキネシス' ) ;
INSERT INTO STATUS VALUES ( '獄彩海美', 4, 'メジャーハート' ) ;
INSERT INTO STATUS VALUES ( '切斑芽美', 4, 'テレキネシス' ) ;
INSERT INTO STATUS VALUES ( '誉望万化', 4, 'サイコキネシス' ) ;
INSERT INTO STATUS VALUES ( '丘原燎多', 3, 'パイロキネシス' ) ;
INSERT INTO STATUS VALUES ( '薄絹休味', 3, 'インシュレーション' ) ;
INSERT INTO STATUS VALUES ( '雲川鞠亜', 2, 'バイオレンスドーナツ' ) ;
INSERT INTO STATUS VALUES ( '黄泉川愛穂', 0, NULL ) ;
INSERT INTO STATUS VALUES ( '垣根帝督', 5, 'ダークマター' ) ;
INSERT INTO STATUS VALUES ( '藍花悦',  5, NULL ) ;
INSERT INTO STATUS VALUES ( '削板軍覇', 5, NULL ) ;
CREATE TABLE AFF (
 NAME TEXT,
 TEAM TEXT,
 PRIMARY KEY ( NAME, TEAM ),
 FOREIGN KEY ( NAME ) REFERENCES STATUS
) ;

INSERT INTO AFF VALUES ( '垣根帝督', 'スクール' ) ;
INSERT INTO AFF VALUES ( '御坂美琴', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '麦野沈利', 'アイテム' ) ;
INSERT INTO AFF VALUES ( '食蜂操祈', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '食蜂操祈', '食蜂派閥' ) ;
INSERT INTO AFF VALUES ( '海原光貴', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '弓箭入鹿', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '弓箭入鹿', '食蜂派閥' ) ;
INSERT INTO AFF VALUES ( '絹旗最愛', 'アイテム' ) ;
INSERT INTO AFF VALUES ( '獄彩海美', 'スクール' ) ;
INSERT INTO AFF VALUES ( '婚后光子', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '切斑芽実', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '滝壺理后', 'アイテム' ) ;
INSERT INTO AFF VALUES ( '白井黒子', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '白井黒子', 'ジャッジメント' ) ;
INSERT INTO AFF VALUES ( '帆風潤子', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '帆風潤子', '食蜂派閥' ) ;
INSERT INTO AFF VALUES ( '誉望万化', 'スクール' ) ;
INSERT INTO AFF VALUES ( '固法美偉', 'ジャッジメント' ) ;
INSERT INTO AFF VALUES ( '口囃子早鳥', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '口囃子早鳥', '食蜂派閥' ) ;
INSERT INTO AFF VALUES ( '薄絹休味', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '泡浮万彬', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '牧上小牧', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '牧上小牧', 'ジャッジメント' ) ;
INSERT INTO AFF VALUES ( '牧上小牧', '食蜂派閥' ) ;
INSERT INTO AFF VALUES ( '湾内絹保', '常盤台中' ) ;
INSERT INTO AFF VALUES ( '雲川鞠亜', '繚乱家政女学校' ) ;
INSERT INTO AFF VALUES ( '初春飾利', '柵川中' ) ;
INSERT INTO AFF VALUES ( '初春飾利', 'ジャッジメント' ) ;
INSERT INTO AFF VALUES ( 'フレンダ', 'アイテム' ) ;
INSERT INTO AFF VALUES ( '佐天涙子', '柵川中' ) ;
INSERT INTO AFF VALUES ( '土御門舞夏', '繚乱家政女学校' ) ;
INSERT INTO AFF VALUES ( '浜面仕上', 'アイテム' ) ;