Oracle中锁的概念

锁是数据库用来控制共享资源并发访问的机制。 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 锁定的优点 一致性 - 一次只允许一个用户修改数据 完整性 - 为所有用户提供正确的数据。如果一个用户进行了修改并保存,所做的修改将反映给所有用户 锁的类型 行级锁 对正在被修改的行进行锁定。其他用户可以访问除被锁定的行以外的行 行级锁是一种排他锁,防止其他事务修改此行 在使用以下语句时,Oracle会自动应用行级锁:INSERT UPDATE DELETE SELECT … FOR UPDATE SELECT … FOR UPDATE语句允许用户一次锁定多条记录进行更新 使用COMMIT或ROLLBACK语句释放锁 SELECT … FOR UPDATE语法:SELECT … FOR UPDATE [OF columns][WAIT n | NOWAIT]; SQL> SELECT * FROM order_master WHERE vencode=’V002’ FOR UPDATE OF odate, del_date; SQL> UPDATE order_master SET del_date=’28-8月-05’ WHERE vencode=’V002’; SQL> COMMIT; SQL> SELECT * FROM order_master WHERE vencode=’V002’ FOR UPDATE WAIT 5; SQL> SELECT * FROM order_master WHERE vencode=’V002’ FOR UPDATE NOWAIT; 使用命令显示地锁定表,应用表级锁的语法是: LOCK TABLE table_name IN mode MODE; 行共享 (ROW SHARE) – 禁止排他锁定表 行排他(ROW EXCLUSIVE) – 禁止使用排他锁和共享锁 共享锁(SHARE) 锁定表,仅允许其他用户查询表中的行 禁止其他用户插入、更新和删除行 多个用户可以同时在同一个表上应用此锁 共享行排他(SHARE ROW EXCLUSIVE) – 比共享锁更多的限制,禁止使用共享锁及更高的锁 排他(EXCLUSIVE) – 限制最强的表锁,仅允许其他用户查询该表的行。禁止修改和锁定表 表级锁 占用模式 其他用户 ROW SHARE ROW EXCLUSIVE SHARE SHARE ROW EXCLUSIVE EXCLUSIVE SELECT..FOR UPDATE INSERT DELETE UPDATE ROW SHARE √ √ √ √ × √ √ ROW EXCLUSIVE √ √ × × × √ √ SHARE √ × √ × × √ × SHARE ROW EXCLUSIVE √ × × × × √ × EXCLUSIVE × × × × × × × 死锁 当两个事务相互等待对方释放资源时,就会形成死锁 Oracle会自动检测死锁,并通过结束其中的一个事务来解决死锁 右边是一个死锁的例子
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值