栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

说一下mysql的锁有哪些?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

说一下mysql的锁有哪些?

         mysql中锁主要分为乐观锁和悲观锁,乐观锁需要自己去实现通常都是加版本号。悲观锁在mysql中是有具体实现的,而且实现的种类比较多。

        首先悲观锁可以分为行锁和表锁:

                行锁分为共享锁(S)和排它锁(X)

                        排它锁则分为:

                                在RR隔离级别下:分为记录锁(record lock)、间隙锁(gap lock)、临健锁(记录锁+间隙锁)(next-key lock)

                                在RC隔离级别下:只有记录锁

                表锁分为意向锁和自增锁

                        意向锁分为意向共享锁(IS)和意向排它锁(IX)

                        自增锁就是控制主键递增的

下面看一下在不同隔离级别下不同的sql语句加锁的情况只分析排它锁(select * from t for update)

        RR隔离级别下:

                1、无主键无唯一索引无普通索引:

                        表:意向排它锁(lock mode IX)

                        记录:临键锁+边界最大值锁(lock mode X + supremum)

                        结果:相当于锁全表

                2、无主键无唯一索引有普通索引:

                        条件有索引:

                                表:意向排它锁(lock mode IX)

                                记录:

                                        索引条件:临键锁+间隙锁(lock_mode X + lock_mode X locks gap before rec)

                                        聚簇索引:记录锁(lock_mode X locks rec but not gap)

                                结果:当前条件上下两个索引范围(

                                        例1:系统三条记录10,20,30  如果条件为=20 则会锁定[10,20)+[20]+(20,30))

                                        例2:系统三条记录10,20,30  如果条件为=10 则会锁定[负无穷,10)+[10]+(10,20))

                        条件无索引:

                                表:意向排它锁(lock mode IX)

                                记录:临键锁+边界最大值锁(lock mode X + supremum)

                                结果:相当于锁全表

                3、无主键有唯一索引无普通索引:

                        条件有索引:

                                表:意向排它锁(lock mode IX)

                                记录:记录锁(lock_mode X locks rec but not gap)

                                结果:只锁条件行

                        条件无索引:

                                表:意向排它锁(lock mode IX)

                                记录:临键锁+边界最大值锁(lock mode X + supremum)

                                结果:相当于锁全表

                4、有主键无唯一索引无普通索引;

                        条件有索引:

                                表:意向排它锁(lock mode IX)

                                记录:记录锁(lock_mode X locks rec but not gap)

                                结果:锁定当前行

                        条件无索引:

                                表:意向排它锁(lock mode IX)

                                记录:临键锁+边界最大值锁(lock mode X + supremum)

                                结果:相当于锁全表

                5、有主键无唯一索引有普通索引;

                        条件有索引:

                                普通索引条件:

                                        表:意向排它锁(lock mode IX)

                                        记录:

                                                索引:临键锁+间隙锁(lock_mode X + lock_mode X locks gap before rec)

                                                主键:当前记录对应的主键锁(lock_mode X locks rec but not gap )

                                        结果:锁定记录上下区间+对应主键

                                主键条件:主键记录锁(lock_mode X locks rec but not gap)

                                混合条件:主键记录锁(lock_mode X locks rec but not gap)

                        条件无索引:

                                表:意向排它锁(lock mode IX)

                                记录:

                                        普通索引:临键锁+边界最大值锁(lock mode X + supremum)

                                        主键:所有主键记录锁(lock_mode X locks rec but not gap)

                                结果:相当于锁全表

                6、有主键有唯一索引无普通索引:

                       条件有索引:

                                唯一索引:

                                        表:意向排它锁(lock mode IX)

                                        记录:

                                                 唯一索引:条件记录锁(lock_mode X locks rec but not gap)

                                                 主键:条件对应记录的主键锁(lock_mode X locks rec but not gap)

                                                结果:条件对应的记录加锁,条件对应的主键加锁

                                主键索引:主键记录锁( lock_mode X locks rec but not gap)

                        条件无索引:

                                表:意向排它锁(lock mode IX)

                                记录:

                                        唯一索引:临键锁+边界最大值锁(lock mode X + supremum)

                                         主键:记录锁(lock_mode X locks rec but not gap)

                                结果:相当于锁全表

综上所述:在RR的隔离级别条件下:

        1、如果查全表则是表锁。

        2、如果带条件查询

                条件为普通索引:临键锁+边界最大值锁(lock mode X + supremum)

                条件为唯一索引:临键锁+边界最大值锁(lock mode X + supremum)

                条件为主键:临键锁+边界最大值锁(lock mode X + supremum)

在RC隔离级别下,因为没有间隙锁所以锁退化为记录锁。

         

        

理解之上,写出想要说的话!

以上仅为个人拙见,写出来加深记忆,错误之处欢迎大神指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/681659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号