是这样的,同一时间内出现多个 Request 进来,同时提交了多组数据进数据库。操作的是同一个表。导致有一些不符合规则的被写进数据库。具体操作如下
begin tran Tran1
insert into table A //因为并发,导致程序里生产的主键重复,所以 A 没插入成功
insert into table B //是 A 的子表
if(@@error==0)
begin
COMMIT TRAN Tran1
return 0;
end
else
begin
ROLLBACK TRAN Tran1
return -1;
end
大致就是上面这个操作。后面产生的结果是,别的事务的脏数据(B 表的那些,A 主键重复)插入到事务成功的 Insert 数据里。如何做才能避免这种错误