Code Bye

关于事物回滚的问题

背景:A表里有三个字段:单号,原料编号,完成状态(有已完成和未完成);
业务流程是分批次加工原材料,假如全部加工完成,勾选已完成复选框,勾选完已完成复选框后,该单号下的原材料状态都更新为已完成。
例如,该原材料分三批加工,第一次为未完成,第二次为未完成,第三次勾选了已完成复选框,保存后,更新第一次第二次的完成状态为已完成。
现在在BLL层写了三个事物 :
第一个事物往表B中插入数据, INSERT
第二个事物是往表A里插入数据,INSERT
第三个事物前有个IF判断,假如是已完成,执行第三个事物
把A表里之前这个单号下全部的信息的完成状态字段更新为已完成。UPDATE
过程:执行上面的例子没有问题,但是假如一次全部加工完成怎么办,第二个事物还没有提交,怎么更新第三个呢
解决方案

20

数据事务根本不是这个概念,你这是胡乱套用底层概念。
数据库事务是指在一瞬间(例如500毫秒)之内,同一个客户端会话有2、3条或更多条命令连续发送,封装为一个事务,达到ACID(要么执行到最后,要么数据完全回滚)。
你说的业务,是保证用户是“键盘侠”能够在一瞬间操作完这三步吗?是用户永远都死板地只执行这三步吗?肯定不是。
根本不是数据库事务,根本不是低级的技术概念,而是业务概念,就不要一点点底层技术概念去设计。你应该从现实中去设计,假如现实的用户体验不可能用低级技术来解决,那么就要用业务流程来设计来解决,也就是用离散的“多个”业务流来解决,而不是用简单的技术语句来解决。
根本谈不上数据库事务。纠结于数据库事务,这就是以技术的脑袋来取代现实的脑袋,就相当于一个疯子他分不清楚镜子中的本人还是真实的本人更加真实,这纯粹是原因是没有规范设计思维方式而造成的。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于事物回滚的问题