我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle锁-行级排它锁(一)

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle锁-行级排它锁(一)

Oracle锁-行级排它锁(一)

下一篇:共享锁

学习电子书:https://docs.oracle.com/cd/E18283_01/server.112/e16508/consist.htm#CNCPT1339

什么是排它锁?

每一个事务在修改资源时会获得排他锁,该事务不结束,则其他事务不能修改此资源。(注意:这里的修改不是数据“增删查改”中的改。数据是资源的一种,可以先理解为修改数据。第一个事务修改资源,第一个事务就先占有排他锁)。

什么是行级排他锁?

针对行数据修改,事务占有的排他锁,称作行级排它锁(或排他的行锁,或粒度为行的排它锁)。行数据修改的修改不是指数据内容的修改,它是指新增行,删除行,修改行内容

实战:

这里有一个bank表,主键是id。下面的部分例子以当前存在的id=2的行进行说明。

 

 

第一种行修改:某一个事务删除行,其他事务不能新增该行,修改该行内容,删除该行。

打开一个窗口,针对id=2的行,执行删除操作,不commit也不rollback。(一个窗口就是一个事务)

打开另一个窗口,单独执行下面每一条语句,你会发现它都在Executing。

update bank set money = 8000 where id=2; 
insert into bank values (2,8000); --主键一样
delete from bank b where b.id=2;

 

 

 

 

 第二种行修改:某事务新增一行数据,另外的事务新增主键相同的行,则会等待排它锁的释放。

一个窗口执行 insert into bank values (900,8000)。另一个窗口单独执行下面的每一句sql。(每重新自测一句SQL,都要把当前事务结束掉再重新开始。)

--以下的新增操作需要等待
delete from bank b where b.id=900; -- 0条删除,原本表里就没有这条记录
update bank set money = 8000 where id=900; --0条修改,原本表里就没有这条记录
--Executing,因为可以Commit意味着就要成功插入,
--但另外的事务也加了相同主键的行,所以会等跟自己冲突的那行的排它锁释放。
insert into bank values (900,8000);

第三种行修改:某事务修改一行数据,另外的事务修改、删除相同的行,则会等待排他锁的释放。

--另一个事务修改id为2的数据 update bank b set money=900 where b.id=2
update bank set money = 8000 where id=2; --等待
delete from bank b where b.id=2; --等待
insert into bank values (2,8000); --不等待,因为另外的事务update不了主键,而新增就判断约束是否重复。

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle锁-行级排它锁(一)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle锁-行级排它锁(一)

下一篇:共享锁学习电子书:https://docs.oracle.com/cd/E18283_01/server.112/e16508/consist.htm#CNCPT1339什么是排它锁?每一个事务在修改资源时会获得排他锁,该事务不结束,则其他事务不能修改
Oracle锁-行级排它锁(一)
2016-12-01

MySQL的表级锁,行级锁,排它锁和共享锁

目录前言一、表级锁&行级锁二、排它锁&共享锁1. 测试不同事务之间排它锁和共享锁的兼容性2. 测试行锁加在索引项上三、串行化隔离级别测试前言如果我们和面试官聊到事务的问题,怎么回答呢?先说下事务是什么,因为我们业务是比较复杂的,不可能一
2022-07-14

MySQL的表级锁,行级锁,排它锁和共享锁是什么

这篇文章主要介绍“MySQL的表级锁,行级锁,排它锁和共享锁是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL的表级锁,行级锁,排它锁和共享锁是什么”文章能帮助大家解决问题。前言先说下事
2023-07-02

MySQL表锁、行锁、排它锁及共享锁怎么使用

这篇文章主要介绍“MySQL表锁、行锁、排它锁及共享锁怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MySQL表锁、行锁、排它锁及共享锁怎么使用”文章能帮助大家解决问题。一、事务隔离机制的选
2023-06-29

理解共享锁和排它锁

1.2 例子:共享锁事务读取以不同的 session 来举例:a:start transaction; select * from demo where id = 1 lock in share mode;b:start transaction;
理解共享锁和排它锁
2014-06-24

MySQL的意向共享锁、意向排它锁和死锁

目录一、InnoDB的表级锁二、意向共享锁和意向排它锁三、死锁1. 数据库中的死锁2. 死锁场景以及解决方法3. 操作三、锁的优化建议一、InnoDB的表级锁在绝大多数情况下应该使用行锁,因为事务和行锁往往是选择InnoDB的理由,但个别
2022-07-14

mysql中什么是排它锁

本篇文章为大家展示了mysql中什么是排它锁,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。1、说明排他锁 exclusive lock(也叫writer lock)又称写锁,是悲观锁的一种实现。排它
2023-06-15

MySQL的意向共享锁、意向排它锁和死锁是什么

本篇内容介绍了“MySQL的意向共享锁、意向排它锁和死锁是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、InnoDB的表级锁在绝大多
2023-07-02

编程热搜

目录