关于存储过程并发
外部程序两次并发的(传的参数不同)调用存储过程A,在存储过程A中调用存储过程B,当存储过程B中commit或者rollback之后会不会影响存储过程A,这时存储过程A会不...
外部程序两次并发的(传的参数不同)调用存储过程A,在存储过程A中调用存储过程B,当存储过程B中commit 或者rollback之后会不会影响存储过程A,这时存储过程A会不会还能继续继续往下执行呢?
现在是我两次如果顺序的调用存储过程A,数据插入和更新时正确的,但是两次并发的去调用存储过程A,两次调用又一次是失败的,当我不在存储过程A中调用B,这时数据也是对的,其中的原因是什么呢?
什么导致的呢?请大家帮忙分析下 展开
现在是我两次如果顺序的调用存储过程A,数据插入和更新时正确的,但是两次并发的去调用存储过程A,两次调用又一次是失败的,当我不在存储过程A中调用B,这时数据也是对的,其中的原因是什么呢?
什么导致的呢?请大家帮忙分析下 展开
展开全部
这个问题一般是数据锁造成的,INSERT的时候一般不会遇到这种问题,你在A或者B存储过程中查看一下,一定有UPDATE语句或者 SELECT FOR UPDATE语句,两个并发的段悔蔽请求同时锁一条记录就会造成一条成功另一条失败。
不过按照你的描述最大的可能性是另外一种情况,就是两握州次INSERT插入的前陪数据某个字段是相同的值,好死不死的,这个相同值的字段又设置了唯一索引或者约束,那么当第一条记录插入成功后第二条记录就会必然失败回滚。
不过按照你的描述最大的可能性是另外一种情况,就是两握州次INSERT插入的前陪数据某个字段是相同的值,好死不死的,这个相同值的字段又设置了唯一索引或者约束,那么当第一条记录插入成功后第二条记录就会必然失败回滚。
追问
但是我两次如果顺序的调用存储过程A,数据插入和更新时正确的,如果相同值的字段设置了唯一索引或者约束,顺序执行也应该出错吧?
追答
那我只能臆测你是不是有时间之类的字段设置成唯一约束了?同时提交就报错,顺序提交就不报错。要不然就还是找找数据锁的问题,只有这两种原因可能导致你这种情况
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询