mysql - 如何查找表中相对于初始 SQL fixture 的更改?

标签 mysql database testing fixtures

我有许多针对 MySQL 数据库运行的测试,该数据库预加载了来自一组 SQL 文件的模式和示例数据。其中一些测试在运行期间还会在数据库中创建新数据。

通常,测试负责自行清理(因此不会污染其他测试的数据库环境)。但是,其中一些测试似乎没有完全这样做,因此在不应该留下额外/修改的记录。

由于正在测试的代码集很复杂,在整个测试中运行单个事务是不可行的,所以我不能让 MySQL 回滚所有内容(有多个游标和多个游标)涉及的复制数据库服务器等因素)。

我希望有一种方法可以更轻松地识别这些正在污染数据库的测试,但是因为它允许测试写入数据库(只要它们之后删除东西),我不能只查看对数据库的所有更改 - 我只需要有效更改,删除取消修改。

我的想法是,如果有一种直接的方法可以将一个表的内容与另一个表进行比较,我可以在运行每个测试后这样做,将用 fixture 初始化的表的内容与表的内容进行比较测试后。

最佳答案

到目前为止,我通过其他 channel 获得的一些各种建议:

  • CHECKSUM TABLE - 这几乎可以完美满足我的需求,除了它仅适用于 MyISAM 表(我们使用 InnoDB)。

  • SHOW TABLE STATUS - 这提供了 Data_length,它可以用作简单的比较。如果我找不到更好的东西,这可能就足够了。

关于mysql - 如何查找表中相对于初始 SQL fixture 的更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737948/

相关文章:

mysql - Perl MySQL utf8mb4 问题/可能的错误

c# - 使用 MVC 从头开始​​创建网站,哪个 ORM 更好,EF 还是 NHibernate?

Java/Selenium 按 ID 查找元素 - Selenium 是否循环注释?

Xcode 5 测试未运行

mysql - 在mysql中使用JOIN语句获取最后插入的行

unit-testing - tdd - 为第 3 方代码创建测试

mysqltuner推荐建议

mysql - 关联表左连接

mysql - 具有基于枚举的过滤器的平面 MySQL 表出乎意料地慢

mysql - 如何将基本的 mysql 查询(相关表)更改为 Laravel?