MYSQL下数据库事务是如何处理这个场景的?请教各位大虾
批次表(P)
字段:ID,detailCount(统计每批次总数)
条码表(I)
字段:ID,fromCount,toCount,totalCount,P_id
实现业务:
插入数据到条码表,插入之前先去批次表插入一条批次明细,并得到批次ID,然后再去批次表读取sum(detailCount),得到起始Count和结束Count。
实现场景:
P表数据:
1 100
2 100
3 500
此时,比如要插入200个条码,则先去P表插入一条数据(detailCount=500),此时会返回ID=4,然后在用ID=4去汇总(select sum(detailCount) from p where id<4)得到700,然后插入条码表inert into I(fromCount,toCount,totalCount,P_id)values(700,900,200,4)
问题来了(如下业务场景都建立在数据库事务的前提下):
假如有A场景正在执行如上业务,并得到ID=4,然后正在执行条码表的插入操作,未结束的过程中,B场景也进来了 也执行同样的业务。
因为事务是整段执行完之后如果没异常才提交,如果有异常就回滚,
1、那么B场景进来的时候是不是会读取到批次ID=4?还是ID=5?
2、如果AB几乎是同时执行,且A执行过程中B场景也进来的,那么如果A场景执行失败并回滚了,那么B怎么办?B最终从批次表得到批次ID究竟是4还是5?
感谢各位大虾指教