首先,我创建了一个包含两个记录的表:
C:\Software\sqlite-tools-win32-x86-3360000>sqlite3.exe
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test.db
sqlite> CREATE TABLE people(first_name TEXT, last_name TEXT, PRIMARY KEY([first_name], [last_name]));
sqlite> INSERT INTO people(first_name, last_name) VALUES ("John", "Doe");
sqlite> INSERT INTO people(first_name, last_name) VALUES ("Jane", "Doe");
sqlite> .quit然后我复制了数据库并检查它们是否相等:
C:\Software\sqlite-tools-win32-x86-3360000>copy test.db test2.db
1 file(s) copied.
C:\Software\sqlite-tools-win32-x86-3360000>sqldiff.exe test.db test2.db
C:\Software\sqlite-tools-win32-x86-3360000>然后,我删除了第一个记录,并再次添加了该记录:
C:\Software\sqlite-tools-win32-x86-3360000>sqlite3.exe
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .open test2.db
sqlite> DELETE FROM people WHERE first_name = 'John' AND last_name = 'Doe';
sqlite> INSERT INTO people(first_name, last_name) VALUES ("John", "Doe");
sqlite> .quit之后,我再次比较了这两个数据库:
C:\Software\sqlite-tools-win32-x86-3360000>sqldiff.exe test.db test2.db
DELETE FROM people WHERE rowid=1;
INSERT INTO people(rowid,first_name,last_name) VALUES(3,'John','Doe');
C:\Software\sqlite-tools-win32-x86-3360000>我理解输出,因为唱片“约翰”的“无名氏”是不同的。
然而,我并不关心我的使用程序中的rowid。
如果可以查询的数据是相等的,那么如何才能看到被认为相等的两个数据库/表的差异?
换句话说,只要除了rowid以外的所有值都是相同的,那么两个记录就应该被认为是相等的。
发布于 2022-02-19 11:05:01
如果使用第三方工具是可以接受的,我可以建议使用用于SQLite的KS合并。它通过主键而不是rowid来比较数据。提供免费版本,以下是免费版本的截图:

任何更改都将突出显示。它对表和PK中的列数有一些限制,但支持两列键。我是那个工具的作者。
https://stackoverflow.com/questions/70460111
复制相似问题