数据库:写入前先观察状态
先确认目标和结构,再看数据、做一次受限修改并验证。
数据库也是结构化状态
文件会直接呈现自身内容;数据库则通过数据库引擎呈现状态,包括表或集合、记录、索引和查询。不要从写入开始。先确认所使用的驱动和数据库,再查看已有结构。
这里延续了处理配置文件时的原则:面向真正要操作的逻辑对象——表、行、键或文档——而不是纠结数据在底层如何存放。
`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