【发布时间】:2011-07-28 10:22:59
【问题描述】:
这是一个有趣的情况。
我用 MySQL 开始一个事务。我的交易涉及 3 个相关查询。 每个查询都必须成功,如果不成功,则不应将任何内容写入数据库。
现在...故意,对于第二个查询...恰好是一个 UPDATE 查询...我改变了 标识要更新为无效(不存在)PK 值的记录的 pk 值。我希望第二个查询失败以进行测试。查询很好,只是 c_id 值错误(我试图更新的记录没有退出)。
问题是查询是用“OK”执行的...
mysql> UPDATE tableX SET bal = 4576.99 WHERE c_id = 3789;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0
这是一个问题,因为错误(从我的角度来看是错误,因为必须更新的关键记录没有在相关查询链中更新)没有被捕获,因此事务没有中止和回滚,而是进程继续进行第三个查询,该查询也成功,然后提交事务。
所以,我觉得奇怪的是这样的错误没有被 MySQL 捕获或者没有被 MySQL 标记为错误。
关于为什么或如何解决的任何见解?
【问题讨论】: