Mysql的锁

表级锁、行级锁、全局锁

表级锁:锁住一整张表,针对非索引字段加的锁,sql没有用到索引就会使用全局锁,性能较低。

行级锁:针对索引字段加的锁,会锁住一行记录,并发性能高。

全局锁:锁住一整个库,让数据库处于只读状态,一般在数据备份时用到。

当update、delete的时候没有命中唯一索引或者索引失效,会走全表扫描加上表锁,性能很低。

共享锁和排它锁

表锁和行锁都由共享锁和排它锁。

共享锁又称读锁,允许多个事务同时读取数据。

排它锁又称写锁,在修改操作时会获取排他锁,排它锁之间是互斥的,同时只允许一个事务获取。

共享锁之间不互斥,共享锁与排它锁互斥,排它锁之间是互斥的。

意向锁

意向锁是表锁,主要作用是在我们需要对整张表加表锁的时候,由于表锁和行锁是互斥的,如果去一行一行的检查有没有行锁,那么效率很低,所以当我们去加行锁的时候同时会加上一个意向锁,当要加表锁的时候检查到有意向锁,就知道某行记录加了行锁,也就不用一行行的去检查了。

记录锁、间隙锁、临键锁

它们都是行锁。

记录锁:对单个记录加锁。

间隙锁:锁定记录之间的间隙,不包括记录。

临键锁:记录锁+间隙锁,锁定一个范围,包括记录本身。主要是为了解决幻读问题。

临键锁是RR隔离级别下用于防止幻读的措施,当select...for update,select...for lock in share mode 去范围查询时,或者查询条件是非唯一索引查出多行记录时就会产生临键锁,防止插入导致幻读。

相关推荐
郝YH是人间理想9 分钟前
Python面向对象
开发语言·python·面向对象
Full Stack Developme1 小时前
SQL 版本历史
数据库·sql
大刀爱敲代码1 小时前
基础算法01——二分查找(Binary Search)
java·算法
大土豆的bug记录2 小时前
鸿蒙进行视频上传,使用 request.uploadFile方法
开发语言·前端·华为·arkts·鸿蒙·arkui
声声codeGrandMaster3 小时前
Django项目入门
后端·mysql·django
追风少年1553 小时前
常见中间件漏洞之一 ----【Tomcat】
java·中间件·tomcat
杰克逊的日记4 小时前
mysql数据实时全量+增量迁移
数据库·mysql·数据迁移
yang_love10114 小时前
Spring Boot 中的 @ConditionalOnBean 注解详解
java·spring boot·后端
hhw1991124 小时前
c#知识点补充3
开发语言·c#
Antonio9154 小时前
【Q&A】观察者模式在QT有哪些应用?
开发语言·qt·观察者模式