MySQL更新返回事务中受影响的0行
表account有一个特殊字段“executor”,让守护进程知道该帐户已被阻止,无法使用其中一个守护进程进行更新 逐步:MySQL更新返回事务中受影响的0行,mysql,transactions,sql-update,rows-affected,Mysql,Transactions,Sql Update,Rows Affected,表account有一个特殊字段“executor”,让守护进程知道该帐户已被阻止,无法使用其中一个守护进程进行更新 逐步: 启动事务 通过以下方式冻结帐户: UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234; 一些行动。在此步骤中,另一个守护进程可以选择id为1234的行并尝试更新它(或更新另一个字段,而不是“executor”) 返回的帐户状态为: UPDATE `account`
UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234;
UPDATE `account` SET `executor` = NULL WHERE `executor` = 2727 AND `id` = 1234;
UPDATE `account` SET `executor` = 2727 WHERE `executor` is NULL AND `id` = 1234;
2) 事务块记录
3) 在交易期间,我会这样做
`UPDATE `account` SET `balance` = 1 WHERE `id` = 1234;`
4) 在此查询之后
SELECT `executor` FROM `account` WHERE `id`=1234
给出结果2727
在多次重复第3点和第4点之后,我们得到结果executor
=NULL。。。或者0,因为我将结果写入int类型的变量,但这很可能是相同的NULL。。。但这并不重要。。在任何情况下,遗嘱执行人不再是有价值的人2727
进一步的事务被回滚。。。
如果再次重复操作,则无需重置executor的值,一切正常…您有多个进程正在运行,并且在更新同一帐户ID的两个进程之间出现冲突?但在第二步后,记录必须锁定事务,不是吗?