我有2个sqlite的文件,一个是年纪大了,另外一个有一些新的数据进行比较,以第一个。 是否有可能将2个sqlite文件与任何单个命令进行比较,如果有任何区别,是否需要更新?是否有可能比较2个sqlite的文件和更新
欢迎任何评论
感谢
我有2个sqlite的文件,一个是年纪大了,另外一个有一些新的数据进行比较,以第一个。 是否有可能将2个sqlite文件与任何单个命令进行比较,如果有任何区别,是否需要更新?是否有可能比较2个sqlite的文件和更新
欢迎任何评论
感谢
没有单一的命令。但有一些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等工具来比较两个输出。
感谢您编写“SQL方式”代码。但实际上,我猜这对于大表来说会比较慢,因为所有数据都将从两个表中多次检索(至少四次),然后使用默认归类逐列比较。请参阅http://www.sqlite.org/lang_select.html – 2011-01-15 13:52:49
你可以指望的行数,以确定他们是否是不同的,但是,它是不平凡的,以决定如何更新“旧的一个”。既然你有机会获得这两个文件,最简单的方法,海事组织,如果你只想让旧表一样的新的一个是:
1)计算行数。如果旧<新:那么: 2)截断旧表 3)选择新表中的所有行并将它们插入到旧表中。
如果你只处理行数的变化,你不会处理行内容修改。如果有任何UPDATE语句已经运行,您将放弃更改。所以恕我直言不是一个好的解决方案 – 2011-01-14 06:45:26
这样的功能没有直接的命令。
你可以使用一个触发器,然后进行包含所有的修改(INSERT/UPDATE/DELETE)对数据库进行的“日记”一个单独的列表,然后运行它不服老。
但是,如果您没有任何安装这种触发器的可能性,则必须读取所有文件行,然后测试旧表中的新行是否相同,然后创建UPDATE/INSERT /删除。
第2解决方案将慢死了:你必须阅读所有的新内容,然后搜索旧表的每一行的内容。
所以对于一个快速的解决方案,我只看到了三种可能性:
对于快速二进制比较,在our source code repository中有一个德尔福优化单元(也是FOSS)。
谁做了这个-1没有任何评论? ;) – 2011-01-18 11:15:44
我想你想要的是二元差异。看看[这个答案](http://stackoverflow.com/questions/4580368/how-can-i-diff-2-sqlite-files) – bpercevic 2015-02-11 20:18:21