mysql 多条 update 语句怎么保证同时成功同时失败呢?

查看 202|回复 19
javalaw2010   
要么,你一条一条来,当某个 update 的的影响行数是 0 时,你 rollback ,要么,你有一个预期有多少行会受影响,如果实际影响的行数与预期不符,你 rollback 。异常这种东西一般发生在你代码里,跟数据库有什么关系。
nerkeler
OP
  
@jowan 更新的是多个产品记录,并不是一条记录,你这个思路要加表锁,比如 产品 1 减库存成功了,产品 2 减库存也成功了, 但是产品 3 不满足更新的条件,这时候需要把前两个更新操作回撤
nerkeler
OP
  
@javalaw2010 明白你的意思了,通过受影响的行数 判断,手动抛异常
jowan   
@nerkeler 对呀 transaction 里面 如果业务逻辑不符合的话 你主动 rollback 就行了啊 不就是这样用的吗
Plutooo   
这不是一个代码里 @Transaction 就解决的事情吗,要么手动抛异常,要么手动回滚
nerkeler
OP
  
学艺不精,谢了各位
jowan   
@Plutooo 他这个就是为了保证库存一致性的 并发不大的情况
@Transaction 后 可以按正常逻辑顺序来写 SQL
比如先减产产品库存表 查出来后 for update 加锁 再去加产品包表的库存
不需要 case when
buxudashi   
事务开启;
结果=false;
do{
执行 1 成功往下走,不成功 break;
执行 2 成功往下走,不成功 break;
......
结果=true;
}while(false);//保证只执行 1 次。
如果 true commit;
如果 false callback;
8355   
还好是 java 开发 如果是 php 的估计要被喷死了😀
nerkeler
OP
  
@buxudashi 老哥你这个能简化吧
事务开启;
产品 list.foreach(xxx ->
执行 xxx 不成功 callback;
)
commit;
您需要登录后才可以回帖 登录 | 立即注册

返回顶部