首页 新闻 会员 周边 捐助

关于数据库死锁的问题

0
悬赏园豆:20 [已解决问题] 解决于 2011-10-26 16:20

我写的存储过程,主要语句有:
insert into T(code,amount)values('!@#$%',xx) , 
update T set code=yy where code='!@#$%',

有老大说会发生死锁,给改成:
insert into T(amount)values(xx) , 
set @currentid = @@identity, 
update T set code=yy where id = @currentid,

气死,这两条语句有什么区别?

到底怎么产生死锁,谁能给一个必然死锁的例子看看?.

日暮乡关何处是的主页 日暮乡关何处是 | 初学一级 | 园豆:84
提问于:2011-08-27 09:25
< >
分享
最佳答案
0

你好,我尝试作答一下

从你的题目中我先推论你的表结构为

T { id[自增], code, amount }

INSERT INTO T (
code,
amount
)
VALUES (
'!@#$%',
xx
)

UPDATE T SET
code
= yy
WHERE
code
= '!@#$%' --你这里的目的是更新上面插入的行没做吧.

/*
但是如果其他的事务也插入了code值为'!@#$%'的话~你说会不会发生问题呢?
而你老大的where id = @@identity 你说还会不会发生问题呢?
*/

收获园豆:15
dotNetDR_ | 老鸟四级 |园豆:2078 | 2011-08-29 00:18
其他回答(3)
0

区别应该在 identity 和 !@#$% .

收获园豆:5
Launcher | 园豆:45050 (高人七级) | 2011-08-27 11:26
0

关注。

顾晓北 | 园豆:10898 (专家六级) | 2011-08-27 16:03
0
insert into T(amount)values(xx) ,  
set @currentid = @@identity
update T set code=yy where id = @currentid

一楼说的上面这个办法解决了死锁了吗?

I'mQQ | 园豆:210 (菜鸟二级) | 2011-09-23 10:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册