我有2个sqlite文件,一个较旧,另一个有一些新数据与第一个相比较。 是否可以将2个sqlite文件与任何单个命令进行比较,如果有任何差异,是否可以更新?
欢迎任何评论
由于
答案 0 :(得分:2)
没有单一命令。但有一些SQLite DB comparision tools。你可以自己实现类似的功能。我看到两种基本方式。
SQL方式。打开X数据库,然后附加到Y数据库。使用SELECT ... FROM X.sqlite_master获取X数据库的表列表。浏览列表并执行查询:
SELECT * FROM x.tab
EXCEPT
SELECT * FROM y.tab
UNION ALL
SELECT * FROM y.tab
EXCEPT
SELECT * FROM x.tab
这将返回每个表的表内容差异。现在,对于此查询返回的每一行,您都可以执行REPLACE SQL命令。
工具方式。相当有趣,但该方法也可用于手动同步。使用SQLite.exe工具。在其中打开X数据库并执行.output和.dump命令。对X数据库重复相同的操作。使用Beyond Compare之类的工具来比较两个输出。
答案 1 :(得分:1)
没有这种功能的直接命令。
您可以使用触发器,然后创建一个单独的列表,其中包含对数据库进行的所有修改(INSERT / UPDATE / DELETE)的“日志”,然后针对旧版本运行它。
但是如果你没有任何可能安装这样的触发器,你将必须读取所有文件行,然后测试旧表中的新行是否相同,并进行UPDATE / INSERT / DELETE
第二种解决方案将会很慢:您必须阅读所有新内容,然后搜索旧表中的每一行内容。
因此,对于快速解决方案,我只看到三种可能性:
对于快速二进制差异,our source code repository中有一个Delphi优化单元(也是FOSS)。
答案 2 :(得分:0)
您可以计算行数以确定它们是否不同,但是,决定如何更新“旧版本”并非易事。既然您可以访问这两个文件,那么最简单的方法是imo,如果您只想让旧表与新表一样:
1)计算行数。如果旧的<新的: 2)截断旧表 3)选择新表中的所有行并将它们插入旧表中。