gpt4 book ai didi

MySQL 记录 UPDATE 应该失败但没有。为什么?

转载 作者:行者123 更新时间:2023-11-29 01:33:03 24 4
gpt4 key购买 nike

这里有一个有趣的情况。

我开始使用 MySQL 进行交易。我的交易涉及 3 个相关查询。每个查询都必须成功,否则不应将任何查询写入数据库。

现在......有意地,对于第二个查询......恰好是一个更新查询......我改变了标识要更新为无效(不存在)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标记为错误。

关于为什么或如何解决的任何见解?

最佳答案

正确,已更新 0 行。如果按照您的逻辑,这是一个错误,您应该测试受影响的行数,然后在该数字为 0 时引发错误:

  DECLARE count INT;
UPDATE tableX SET bal = 4576.99 WHERE c_id = 3789;
SELECT ROW_COUNT() INTO count;
IF count = 0 THEN
CALL raise_error;
END IF;

错误会使事务回滚。要引发错误,只需调用一个不存在的例程,如 SO 问题所述: How to raise an error within a MySQL function

关于 row_count() 的更多信息:

http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_row-count

关于MySQL 记录 UPDATE 应该失败但没有。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5526308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com