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

Innodb锁定读是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

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

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

看不清楚,换张图片

免费获取短信验证码

Innodb锁定读是什么

这篇文章主要介绍“Innodb锁定读是什么”,在日常操作中,相信很多人在Innodb锁定读是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Innodb锁定读是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

如果查询数据,接着在相同的事务中插入或者修改相关数据,常规的select语句不能保护数据不被其他事务修改。其他事务可以更新或者删除刚才查询事务中相同的行。

InnoDB支持2种类型的锁定读:

1、SELECT ... LOCK IN SHARE MODE设置一个共享S锁在被查询的行上。其他会话能读取这些行,但是不能修改相应行的数据,直到此事务结束。如果其他事务对相应的行进行了DML操作,而未结束事务前,那当前事务中进行SELECT ... LOCK IN SHARE MODE将一直等待,直到另外的事务完成。

2、SELECT ... FOR UPDATE设置一个排他X锁在相应的行上。按照索引进行select for update查询时,会锁住相关的索引条目和行数据。同样的,此期间其他事务对相关的行进行更新、SELECT ... LOCK IN SHARE MODE、在某些事务隔离级别读数据都将会被堵塞,但一致性读会忽略存在的任何锁,因为老版本的数据不能被锁定,它们通过undo log在内存中构造数据的拷贝。

 

注意:使用锁定读操作的时候,必须开启事务(可以通过START TRANSACTION或者set autocommit=0来开启事务),锁定读相关的锁在事务commit或者rollback时,都会立即释放。如果没有开启事务,则相关的行不会被锁定。


用法举例

假如要往子表插入一条记录,插入前首先要确认一下父表有无相关记录,只有在父表有对应记录时插入才能满足应用数据的完整性约束。如果使用一致性非锁定读来检查父表相应的记录,而在往子表插入对应数据的瞬间,其他会话的事务刚好在你查询父表之后插入子表之前删除或者修改了刚才查到的行,这样接下来的插入操作将可能会不能顺利的完成。

可以使用LOCK IN SHARE MODE进行锁定读,来避免此潜在的问题。如下:

SELECT * FROM parent WHERE NAME = 'Jones' LOCK IN SHARE MODE;

在父表使用LOCK IN SHARE MODE进行查询到jones,此时你能安全的在子表中插入jones相关的数据。此期间如果有其他会话事务视图DML父表中相应的行将会被阻塞,直到你的完成你的操作后结束锁定读的事务,这样可以保证父表、子表的数据的一致性。

另外一个场景,如有两个session需要读取某表A中的一行,在成功读取后在同一事务中更新该行,并在另外的表B中插入刚开始读取到的行。若此时使用SELECT...LOCK IN SHARE MODE则会对读取到A表的记录加S锁,两个session在同时申请X锁进行更新时便发生死锁。另外,由于读取到了A表同一行内容,两个session在向同一表B插入数据时会导致键重复的错误。这种情况下用LOCK IN SHARE MODE不是好的办法,而使用SELECT...FOR UPDATE较合适,在读取的时候阻塞其他事物的读和更新请求。

到此,关于“Innodb锁定读是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

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

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

Innodb锁定读是什么

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

下载Word文档

猜你喜欢

电脑锁定指的是什么

本文小编为大家详细介绍“电脑锁定指的是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“电脑锁定指的是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。电脑锁定是指锁定当前用户的操
2023-02-21

电脑锁定是什么意思

在计算机术语中,"锁定"(Lock)通常指的是对计算机或计算机系统进行安全保护的操作。当计算机被锁定时,用户必须提供有效的凭据(例如密码、PIN码或生物识别信息)才能解锁和访问计算机。锁定计算机的目的是保护用户的隐私和数据安全。通过锁定计算
2023-08-22

mysql用户锁定解锁的方法是什么

要锁定或解锁MySQL用户,可以使用以下方法:1. 锁定用户:- 使用root账户登录MySQL数据库。- 运行以下命令将用户锁定:```ALTER USER 'username'@'localhost' ACCOUNT LOCK;```将
2023-09-29

Java实现读写锁的原理是什么

本文小编为大家详细介绍“Java实现读写锁的原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java实现读写锁的原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。读/写锁Java实现首先我们总结一
2023-06-29

java读写锁的使用方法是什么

在Java中,读写锁是一种特殊的锁,允许多个线程同时读取共享资源,但只允许一个线程进行写操作。读写锁通过ReadWriteLock接口实现,其中最常用的实现类是ReentrantReadWriteLock。下面是Java读写锁的使用方法:
java读写锁的使用方法是什么
2024-04-03

java读写锁的工作原理是什么

读写锁是一种特殊的锁机制,允许多个线程同时读取共享资源,但只允许一个线程写入共享资源。读写锁的工作原理如下:当一个线程想要读取共享资源时,它必须先尝试获取读锁。如果没有写线程持有写锁,则读取线程可以获取读锁并进行读取操作。如果有其他线程已经
java读写锁的工作原理是什么
2024-04-03

mysql innodb指的是什么

这篇文章主要讲解了“mysql innodb指的是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql innodb指的是什么”吧!InnoDB是MyS
2023-05-25

java读写锁怎么使用及优点是什么

这篇文章主要介绍了java读写锁怎么使用及优点是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java读写锁怎么使用及优点是什么文章都会有所收获,下面我们一起来看看吧。前言:读写锁(Readers-Writ
2023-06-30

编程热搜

目录