sqlite3.exe
SQLite 官方命令行交互工具,是整套工具集的核心程序。
其它工具:
sqlite3_rsync.exe、sqldiff.exe、sqlite3_analyzer.exe是配套独立工具;sqlite3.exe 才是数据库交互终端。
两种使用模式
1. 交互模式(进入 sqlite> 提示符)
cmd
sqlite3.exe test.db- 打开数据库文件,文件不存在则新建。
- 输入SQL语句,以分号
;结尾执行。 - 点命令(.开头)不是SQL,不需要分号,例如
.tables.schema.dump.read。
sql
sqlite> SELECT count(*) FROM test_user;
sqlite> .tables
sqlite> .schema test_user
sqlite> .quit2. 单行非交互模式(直接执行,不进入交互shell)
适合脚本/bat里面调用,非常常用
cmd
:: 执行单条SQL
sqlite3.exe test.db "SELECT count(*) FROM test_user;"
:: 输出到文件
sqlite3.exe test.db "SELECT * FROM test_user LIMIT 10;" > out.txt
:: 执行sql脚本文件
sqlite3.exe test.db < dump.sql
:: 直接执行点命令
sqlite3.exe test.db ".tables"高频点命令汇总(仅sqlite3.exe可用,代码里不能执行)
.tables 列出所有表
.schema 查看全部建表语句
.schema test_user 查看单表建表语句
.dump 导出全库SQL
.dump test_user 仅导出指定表
.output xxx.sql 将输出重定向到文件
.output stdout 切回控制台输出
.read xxx.sql 执行sql文件
.headers on 查询结果显示表头
.mode column 表格对齐输出
.mode csv 输出csv格式
.import a.csv t_table 导入csv文件到表
.quit / .exit 退出美化查询输出示例
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM test_user LIMIT 5;导出 CSV:
sqlite> .mode csv
sqlite> .output data.csv
sqlite> SELECT id,name FROM test_user;
sqlite> .output stdout在 bat / shell 脚本常用写法示例
batch
@echo off
:: 获取表行数输出到变量
for /f %%i in ('sqlite3.exe test.db "SELECT COUNT(*) FROM test_user;"') do set cnt=%%i
echo total=%%cnt%%
:: 导出dump备份
sqlite3.exe test.db ".output backup.sql" ".dump" ".output stdout"常用PRAGMA(SQL语句,可以在代码+命令行都执行)
sql
PRAGMA journal_mode=WAL;
PRAGMA synchronous=NORMAL;
PRAGMA foreign_keys=ON;
PRAGMA wal_checkpoint(FULL);
PRAGMA table_info(test_user);容易混淆区分(重点)
| 程序 | 能力 | 是否能执行SQL |
|---|---|---|
| sqlite3.exe | 交互终端、导入导出dump、执行sql脚本 | ✅ |
| sqlite3_rsync.exe | 页级快照备份复制db文件 | ❌不能跑SQL |
| sqldiff.exe | 对比两个库输出差异SQL | ❌不能跑SQL |
| sqlite3_analyzer.exe | 分析存储碎片报告 | ❌不能跑SQL |
关键点:
.dump/.output/.read这些点命令只有 sqlite3.exe 识别,rusqlite /其它驱动代码不能执行。- 其它三个工具只做专项任务,不提供SQL解释器。
小坑
- 直接运行
sqlite3.exe不带数据库文件名 → 打开内存临时数据库,退出全部丢失,很多人踩坑。 - SQL语句必须
;结尾;点命令不要加分号。 - Windows下如果输出中文乱码,命令行设置
chcp 65001。