我的本地主机 (Win NT) 上有 sqlite 数据库,并且想要备份它。我想使用 shell 命令 '.backup' 来完成这个任务。但似乎我可以在备份过程中将新行插入数据库。
'.backup' shell 命令是否在我的数据库上启动新的独占事务?
我想当我执行 '.backup' shell 命令时,它会锁定我的数据库。
我的本地主机 (Win NT) 上有 sqlite 数据库,并且想要备份它。我想使用 shell 命令 '.backup' 来完成这个任务。但似乎我可以在备份过程中将新行插入数据库。
'.backup' shell 命令是否在我的数据库上启动新的独占事务?
我想当我执行 '.backup' shell 命令时,它会锁定我的数据库。
sqlite3 备份方式不锁定数据库。如果您想锁定数据库,我建议使用以下解决方法:
INSERT
语句,数据库都会获得一个保留锁。但是,此INSERT
语句可以为空。ROLLBACK
或结束事务COMMIT
。代码:
BEGIN;
INSERT INTO <anytable> SELECT * FROM <anytable> WHERE 1=0;
.backup <database> <file>
ROLLBACK;
如果您使用的是名为“备份”的表,并且您正在为每个副本插入一行(日期,..)(如果此信息与您相关),那么一种不那么 hacky 的方法是。