sqldiff.exe 比较SQLite数据库
官方工具包配套,对比两个 SQLite 数据库文件,输出可以把库A变成库B的SQL补丁脚本。
注意顺序:
sqldiff A.db B.db→ 输出SQL执行后,A就变成B的数据状态。
输出内容包含:INSERT / UPDATE / DELETE,可以直接拿去执行做数据同步、比对备份差异、校验备份是否完整。
基础命令
cmd
:: 直接控制台输出差异SQL
sqldiff.exe a.db b.db
:: 将差异保存为补丁sql文件(最常用)
sqldiff.exe a.db b.db > patch.sql得到的 patch.sql 可以应用到 a.db:
cmd
sqlite3.exe a.db < patch.sql常用参数示例
cmd
# 只对比某一张表,忽略其他表
sqldiff.exe --table test_user a.db b.db > diff_user.sql
# 只看表结构差异,不对比数据
sqldiff.exe --schema a.db b.db
# 只输出变更行数统计,不输出完整SQL
sqldiff.exe --summary a.db b.db
# 输出SQL包裹在事务里,执行要么全部成功要么失败
sqldiff.exe --transaction a.db b.db > patch.sql
# 使用表主键匹配行(推荐,避免依赖rowid)
sqldiff.exe --primarykey a.db b.db > patch.sql实操小例子
test1.db原始库- 复制一份得到
test2.db,修改几条数据、新增几条记录 - 执行
cmd
sqldiff.exe test1.db test2.db > diff.sqldiff.sql 里面会自动生成对应的 UPDATE / INSERT / DELETE。 把 diff.sql 导入 test1.db,test1的数据就和 test2 一模一样。
Windows批处理小脚本 diff_db.bat
batch
@echo off
chcp 65001 >nul
set "DB1=origin.db"
set "DB2=backup.db"
set "OUT=diff_patch.sql"
sqldiff.exe --transaction --primarykey "%DB1%" "%DB2%" > "%OUT%"
echo 差异脚本输出:%OUT%
echo 查看文件
notepad "%OUT%"重要坑点
顺序不要搞反
sqldiff A B:生成补丁把 A → B;反过来会得到反向删除插入。默认依靠
rowid匹配行;有显式主键的表建议加上--primarykey,否则rowid发生变化时比对错乱。只对比数据内容,不能处理ALTER TABLE改字段这种DDL变更;表结构改动,
--schema仅能提示差异,不会生成ALTER语句。虚拟表(FTS等)需要加参数
--vtab才能正常对比。大库对比会扫描全部数据,IO开销大,避开业务高峰。
SQLite官方四件套完整总结
| 工具 | 核心用途 |
|---|---|
| sqlite3.exe | 交互式客户端,执行SQL、.dump、.read |
| sqlite3_rsync.exe | 不停机一致性快照备份,本地/SSH远程增量复制db文件 |
| sqlite3_analyzer.exe | 分析数据库存储、页碎片、表/索引空间占用报告 |
| sqldiff.exe | 对比两个库,输出SQL补丁脚本,做数据差异比对 |
使用场景建议:
- 备份校验:备份完一份db,用 sqldiff 对比原库与备份库,确认数据一致;
- 两套环境数据比对;
- 做简单数据同步(小库适用,百万级以上比较会慢)。