分享好友 站长动态首页 网站导航

数据库篇:MySQL锁详解

2022-04-05 11:00 · 头闻号数据库

前言

sql事务的执行,如果需要锁定数据进行更新操作,则必定离不开锁。

1.共享锁和排他锁

排他锁(X锁),当前事务给记录上锁后(insert update delete),可以进行读写,其他事务不可以加任何锁。

共享锁(S锁),是指当前事务给一条记录上锁后,其他事务也可以给当前记录加共享锁。共享锁只用于锁定读,如需要更新数据,是不允许的。

2.表锁

针对数据库表的锁,又称为表

表级别的 AUTO_INC 锁

在为表某列添加 AUTO_INCREDMENT 属性,之后插入数据时可以不指定该字段,系统会自动为它赋值,此时获取自增值是需要 AUTO_INC 锁锁定的。

3.行锁 Record Lock

何为意向锁

如果存在行锁的情况,想给表加锁,怎么办?遍历查看表有没有行锁,太浪费时间了。此时意向锁登场啦!

有了意向锁,则不需要遍历数据也可以直接判断是否可以给表加锁。

4.间隙锁 Gap Lock

mysql 在 repeatable read 隔离级别解决幻读的,有两种实现方式。一是靠 MVCC 方案解决;二是加锁方案解决。然而在事务加锁时,记录是不存在的,是无法加行锁的。则需要靠间隙锁(gap lock)实现。

5.行锁+间隙锁 Next-Key Lock

6.加锁场景(repeatable read 隔离级别加锁 sql,忽略二级索引的加锁操作)

select from

select for update

select lock in share mode

insert、update 和 delete 语句的加锁情况

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞