1、通过select for update或select for update wait或select for update nowait给数据集加锁
具体实现参考select for update和select for update wait和select for update nowait的区别
2、Skip Locked(跳过加锁行获得可以加锁的结果集)
Skip locked是oracle 11g引入的。
通过skip locked可以使select for update语句可以查询出(排除已经被其他会话加锁了的数据行)剩下的数据集,并给剩下的数据集,进行加锁操作。
a、测试一、
代码如下:新建一个SQL窗口1(相当于新建一个会话),执行
update test8 set price=6 where ID=1
但是不执行commit操作,此时,当前数据已经被加锁了。
然后,在新建一个SQL窗口2(相当于新建一个会话),执行
select * from test8 for update skip locked
根据结果集,我们发现ID=1的数据行被排除了
b、测试二
新建SQL窗口1(相当于新建一个会话)代码如下:执行如下语句
select * from test8 for update
此时,不进行commit操作,表中所有的数据行被加锁。根据测试一的结果得出推论:如果使用skip locked的话将查询不出任何结果
新建SQL窗口2(相当于新建一个会话)代码如下:执行如下语句
select * from test8 for update skip locked
没有查出任何结果集,ok,推论正确!
时间: 2024-11-06 06:22:43