SQLite3
(重定向自SQLite)
代码片断
随机取 n 行的方法
SELECT key,value FROM dict ORDER BY RANDOM(key) LIMIT 1
命令行下压缩数据库
find ~ -name '*.sqlite' -exec sqlite3 '{}' 'VACUUM;' \;
时间戳到字符串
SELECT datetime(dt, 'unixepoch', 'localtime')
只读打开文件
可用于读取火狐的数据库:
sqlite3 'file:file.sqlite?immutable=1'
语法
pragma
显示或设定编码:
pragma encoding;
pragma encoding = "UTF-8";
内建命令
显示表的结构
.schema TABLE
设置显示模式。column 模式会对齐数据
.mode MODE
显示/隐藏表格头
.header[s] [ON | OFF]
扩展
使用 load_extension(filename)
函数来载入扩展文件 filename
。
扩展列表
- sqlite-regex-replace-ext,提供 glib 和 icu 的正则替换函数
regex_replace
效率
第一次连接数据库时会比较慢,之后的速度不错。[1]
在 SQLite3 中存储 blob 会导致效率下降,即使不读取它。[2]
caveats
SQLite3 不支持 select * from xxx where yyy in ?
语法,所以需要把 in
后的参数逐个传入。如果参数项过多,又会超过 SQLite3 的参数个数限制(默认为 999)。[3] Python 在这种情况会抛出 too many SQL variables
错误。
参见
外部链接
- SQLite Syntax
- lazierthanthou/sqlite-manager: Manage all your sqlite databases using this lightweight extension for firefox, thunderbird, seamonkey, komodo etc.
- Blog/SQLite Performance on Btrfs - Forza's ramblings
- Optimizing SQLite for servers