关于存储过程并发

外部程序两次并发的(传的参数不同)调用存储过程A,在存储过程A中调用存储过程B,当存储过程B中commit或者rollback之后会不会影响存储过程A,这时存储过程A会不... 外部程序两次并发的(传的参数不同)调用存储过程A,在存储过程A中调用存储过程B,当存储过程B中commit 或者rollback之后会不会影响存储过程A,这时存储过程A会不会还能继续继续往下执行呢?
现在是我两次如果顺序的调用存储过程A,数据插入和更新时正确的,但是两次并发的去调用存储过程A,两次调用又一次是失败的,当我不在存储过程A中调用B,这时数据也是对的,其中的原因是什么呢?
什么导致的呢?请大家帮忙分析下
展开
 我来答
ling78714
2012-11-07
知道答主
回答量:14
采纳率:0%
帮助的人:9.9万
展开全部
这个问题一般是数据锁造成的,INSERT的时候一般不会遇到这种问题,你在A或者B存储过程中查看一下,一定有UPDATE语句或者 SELECT FOR UPDATE语句,两个并发的段悔蔽请求同时锁一条记录就会造成一条成功另一条失败。
不过按照你的描述最大的可能性是另外一种情况,就是两握州次INSERT插入的前陪数据某个字段是相同的值,好死不死的,这个相同值的字段又设置了唯一索引或者约束,那么当第一条记录插入成功后第二条记录就会必然失败回滚。
追问
但是我两次如果顺序的调用存储过程A,数据插入和更新时正确的,如果相同值的字段设置了唯一索引或者约束,顺序执行也应该出错吧?
追答
那我只能臆测你是不是有时间之类的字段设置成唯一约束了?同时提交就报错,顺序提交就不报错。要不然就还是找找数据锁的问题,只有这两种原因可能导致你这种情况
登峰造极8848
2012-10-30 · 超过26用户采纳过TA的回答
知道答主
回答量:109
采纳率:100%
帮助的人:29.7万
展开全部
比较绕啊……B与A有没关系呢?如果没关系,B提交不影响A的。并发调用过程会锁表的呀
追问
A中调用B 穿进去两个参数  如果锁表的话 应该不应该锁表吗?但是为什么会执行失败呢?现在是两次并发调用如果时间间隔小于0.1s就会一次成功 一次失败 大于这个值就会全部成功 但是调用时电脑的事 无法控制 很纠结啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式