ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL 锁原理

2022-03-19 21:06:25  阅读:142  来源: 互联网

标签:事务 查询 插入 MySQL 原理 数据 上锁 select


      

    读锁  :共享锁

    写锁 : 排他锁
    锁分为读锁和写锁,简单理解:对某一行数据加了读锁,其他的人可一来读这一条数据,而不能来更新这条数据,如果加了写锁,其他人既不能更新,也不能读取

    但是 两种锁都不能对 select  语句进行阻止,也就是说select  语句游离在锁之外

    普通的 select  语句不会加任何锁,  

    select  。。。。。。。。。。。。。 lock in share mode 会加上S锁

 

    

    隔离性不同的时候,事务之间的锁的影响也是不一样的

    读已提交   Read  Commited  隔离性下

    1.事务A 查询主键并且上X锁写锁,,事务B再次查询相同的条件并且上X锁写锁的时候,事务B会阻塞,但是查询其他的条件并不会阻塞

 

 

    2.事务A查询唯一索引的时候于上面主键的效果是一样的

    3.事务A查询普通索引并且上X锁写锁,所有查出来的行全部都加锁,事务B进行查询上锁会阻塞,前三个情况都是一样的

 

 

    4.没有索引的情况下,走全表扫描,也知识查询出来的结果才会上锁

    读已提交的级别下,就算上锁,也可以插入数据,但是可重复读的级别情况下是不能插入的,进行插入的事务会阻塞 ,避免了幻读的现象,如果插入的数据跟上锁的数据相邻,就会上锁,如果不相连就不会上锁

      相邻   举例:下图中,查询e为a 的行,插入a1,a1>a,所以会插入在a  和  b  中间,就会上锁,如果插入   2  ,就会插入在1 和 a 中间,就不会上锁

    最极端的情况下,在可重复的隔离级别下,查询某一字段并上锁,是不能修改任何一行数据的,因为比如查询 C =  1 ,当其他行的数据进行修改,将  C 的 值由  2  改为了  1 ,  下一次读取数据也会增加这一行,产生幻读的现象,所以为了避免幻读,就不允许进行修改

  

 

 

    

 

 

 

标签:事务,查询,插入,MySQL,原理,数据,上锁,select
来源: https://www.cnblogs.com/2940500426yingxin/p/16027898.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有