我有许多针对 MySQL 数据库运行的测试,该数据库预加载了来自一组 SQL 文件的模式和示例数据。其中一些测试在运行期间还会在数据库中创建新数据。
通常,测试负责自行清理(因此不会污染其他测试的数据库环境)。但是,其中一些测试似乎没有完全这样做,因此在不应该留下额外/修改的记录。
由于正在测试的代码集很复杂,在整个测试中运行单个事务是不可行的,所以我不能让 MySQL 回滚所有内容(有多个游标和多个游标)涉及的复制数据库服务器等因素)。
我希望有一种方法可以更轻松地识别这些正在污染数据库的测试,但是因为它是允许测试写入数据库(只要它们之后删除东西),我不能只查看对数据库的所有更改 - 我只需要有效更改,删除取消修改。
我的想法是,如果有一种直接的方法可以将一个表的内容与另一个表进行比较,我可以在运行每个测试后这样做,将用 fixture 初始化的表的内容与表的内容进行比较测试后。
最佳答案
到目前为止,我通过其他 channel 获得的一些各种建议:
CHECKSUM TABLE
- 这几乎可以完美满足我的需求,除了它仅适用于 MyISAM 表(我们使用 InnoDB)。SHOW TABLE STATUS
- 这提供了Data_length
,它可以用作简单的比较。如果我找不到更好的东西,这可能就足够了。
关于mysql - 如何查找表中相对于初始 SQL fixture 的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737948/