ORACLE事务中的锁

行级锁

行级锁也叫排他锁,意思是如果在行上加锁,只允许一个用户在该行上进行操作,而不允许其他用户操作此行。
加行锁的方式:
案例1:
在sql语句后面加上for update
例如:

SELECT * FROM AAA_H WHERE ENAME = 'ZHANGSAN' FOR UPDATE;

此时就已经在该行上面加了行级锁,此时如果重新打开一个会话框,对该行数据进行修改或者删除操作,sql将会是一直保持执行中的状态,但不会执行成功,除非将锁消除,即事务提交。
在这里插入图片描述
可以看到sql一直处于执行状态。
当加锁的事务提交之后,才能执行成功。
在这里插入图片描述

update和delete语句会默认加锁

当对某一行执行update或delete语句时会自动在该行上加行级锁。
案例2:
nowait不等待
当另一个事务没有提交或者回滚时,再在改行上进行操作,会直接报错:
示例:
删除一行数据,不提交,使改行处于持有锁的状态:
在这里插入图片描述
再使用nowait查看结果:
在这里插入图片描述
结果为:不等待,直接报错。

设置等待时间

wait 后添加等待时间(单位:秒)
当等待时间到后,事务资源还不释放,再报错
案例三:
设置等待时间,查看结果:
现在行上加锁:
在这里插入图片描述
在查看加锁的行,设置等待时间为1s
1s之后报错
1s之后报错。

不等待跳过锁

事务资源不释放,不等待锁的释放。

案例四:使用skip locked
先在行上加锁:
在这里插入图片描述
在另一个事务中使用skip locked
在这里插入图片描述
如果该行上有所的存在,则会直接跳过,不对改行进行操作,所以以上结果显示为空结果集。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值