データベース:書く前に状態を見る
対象を確認し、構造を見て、データをプレビューし、一つだけ変更して再確認します。
データベースも構造化された状態
ファイルは内容を直接見せますが、データベースはデータベースエンジンを通して状態を見せます。そこにはテーブルやコレクション、レコード、インデックス、クエリがあります。最初から書き込みをせず、まず使用するドライバーとデータベースを確認し、既存の構造を調べます。
設定ファイルと同じ考え方がここでも役立ちます。物理的な保存方法ではなく、テーブル、行、キー、ドキュメントといった実際に扱いたい論理オブジェクトを基準に考えます。
`db` は共通語彙、ドライバの違いは残る
install md db sqlitedbdb sqlitesqliteSQLite は安全な練習場所
ネットワークやパスワードのない一つのローカルファイルです。練習テーブルを作り -t で確認します。
cd lil-playgroundmd datasqlite -c data/notes.sqlite -fsqlite : CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT NOT NULL, status TEXT NOT NULL)sqlite -t最初に構造、次に行
-s はフィールドと型、-n は行のプレビューを示します。空のテーブルも有効な状態です。
sqlite -s notessqlite -n notes 10限定した書き込みは JSON で書ける
-a / -w は : 後に JSON を受け取ります。書き込み後は必ず再確認し、削除は明示的な判断にします。
sqlite -a notes : {"title":"First terminal note","status":"draft"}sqlite -a notes : {"title":"Archive project","status":"done"}sqlite -n notes 10sqlite -w notes title "First terminal note" : {"status":"reviewed"}sqlite -f notes reviewed 20必要なときは固有の SQL
集計や複雑なクエリは : の固有の SQL で書くのが自然です。
sqlite : SELECT status, COUNT(*) AS count FROM notes GROUP BY statusエクスポートとダンプは目的が違う
エクスポートは可搬データ、ダンプはスキーマ+データの復元用です。緊急時の前に復元を試します。
sqlite -o notes -j data/notes.json -fsqlite dump data/notes.sql -fstat data/notes.sqlリモートデータベースは認証情報とネットワークを追加する
エンジンごとに接続モデルが違います。実際のパスワードを再利用スクリプトや公開例へ書かないでください。
db mysqlmysql -c localhost app shoppostgresql -c localhost app shopスクリプトとして残す
これを database-checkpoint.lil として保存します。練習用の SQLite データベースを開き、テーブルの存在を確認して内容を表示し、ダンプを作成します。実データへの書き込みは自動化しません。繰り返し行うデータベース操作は、確認とバックアップから始めるのが基本です。
#lil
@install md sqlite
cd lil-playground
md data
sqlite -c data/notes.sqlite -f
sqlite : CREATE TABLE IF NOT EXISTS notes (id INTEGER PRIMARY KEY, title TEXT NOT NULL, status TEXT NOT NULL)
sqlite -t
sqlite -n notes 10
sqlite dump data/notes.sql -f