MySQL update操作,执行顺序问题
第一种情况单表操作:按照字段排列顺序执行,后执行更新的数据可以使用先执行的数据来更新,比如:b可以根据a更新之后的数据来更新,示例:
update table set a = a+ 1, b= a/2 where id = 1;
第二种情况连表操作更新多张表的数据,没有单表操作的顺序:
(1)修改一条记录。
比如:table1字段count值为6,table2字段count值为20,执行下面操作后table1的count为10,table2的count为22,而不是table1的count为11,table2的count为22
update table1 a inner join table2 b set b.count = b.count+ 2, a.count= b.count/2 where a.id = 1;
(2)修改多条记录,多条记录按照主表主键顺序执行修改操作。
遇到的问题:
每天将A表中状态为“1”的数据修改为状态为“2”,同时B表统计A表每天状态为“1”的数目。即先更新A表字段,再更新B表字段,此时统计A表中状态为“1”的条件应该是state=“1” OR state=“2”,不应该是state=“1”,因为会先更新主表A主键顺序排序第一条的state,将state更新为“2”,在更新表B时,才回去查询表A中状态为“1”的数据,而此时就会缺少一条,因此,连表更新统计操作时需特别注意。