如何解决不同线程对同一个表的INSERT和UPDATE操作的死锁

07-02-06 blueravine
在ORACLE中遇到一个问题是有两个不同的线程(呵,其实不了解到底能不能称之为线程),一个是对一个表进行INSERT操作,另一个是对同一个表进行UPDATE操作,两个线程会同时进行,也就是INSERT与UPDATE同时对一个表进行操作,我该如何解决他们的死锁问题,很急的问题,请提供方法:)
                   

1
litdong
2007-02-06 15:44
这种操作缺省是事物性的,都是独占锁,都会锁行或者锁表,你把问题描述清楚一点,在什么环境下写的库

[该贴被litdong于2007年02月06日 15:48修改过]

[该贴被litdong于2007年02月06日 15:50修改过]

wellsl
2007-02-06 16:20
对数据库的操作跟环境有关系吗

blueravine
2007-02-06 17:15
我们提供了2个公共方法分别做insert和update 他们被n个线程调用

其实想想,一个线程在做INSERT时,肯定是锁表的,那另一个线程跑到对同一个表UPDATE时肯定得不到控制权,但是不希望UPDATE总等着INSERT做完毕才开始执行,希望INSERT 和UPDATE能像时间片轮转一样不要总等着对方。

to litdong

不太明白你的意思,“在什么环境下写的库”?我们是用C#写的方法,分别对同一表进行INSERT 和 UPDATE,而这两个方法可能由不同线程调用

to wellsl

我想数据库应该只有ORACLE和SQL SERVER 等等不同工具的区别吧,我们用的是ORALCE

Coolyu0916
2007-02-07 17:27
ORACLE 的锁是行级别的

不会出现你说的情况

除非同时update同一条记录

同时的update由数据库负责,简单的update是不会死锁的

猜你喜欢
3Go 1 2 3 下一页