参考
B站UP主 我是大彬呀
Mysql都有哪些锁
按锁的粒度分:
-
行级锁
-
页级锁
-
表级锁
按锁的级别分类:
-
共享锁
-
排他锁
-
意向锁
行级锁
含义
mysql中锁定粒度最细的一种锁。表示只针对当前操作的行进行加锁操作
优缺点
行级锁能大大减少数据库操作的冲突,其中加锁力度最小,但是加锁的开销也是最大的
页级锁
含义
页级锁是mysql中锁定粒度介于行级锁和表级锁中间的一种锁
优缺点
表级锁速度快,但是冲突多,行级锁冲突多,但是速度慢。因此,才用了折中的页级锁,一次锁定相邻的一组记录
表级锁
含义
mysql中锁定粒度最大的一种锁,表示当前操作的整张表加锁
优缺点
实现简单,资源消耗较少,被大部分mysql引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定
共享锁
含义
共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有的共享锁
排他锁
含义
排他锁又称写锁、独占锁,如果事务T对数据A加上了排他锁之后,则其他事务不能再对数据A加任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。
意向锁
含义
意向锁是表级锁,其设计的主要目的是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:
- 意向共享锁(IS)
表示事务准备将数据行加入共享锁,也就是说一个数据行加共享锁前必须去的该表的IS锁
- 意向排他锁(IX)
表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁之前必须取得该表的IX锁
意向锁是InnoDB自动加的,不需要用户自动干预。
对于INSERT、UPDATE和DELETE,InnoDB会自动给涉及到的数据加入排他锁。
对于一般的SELECT语句,InnoDB不会加任何锁。
事务可以通过下面的语句显示加共享锁或者排他锁:
-
共享锁:SELECT ... LOCK IN SHARE MODE;
-
排他锁:SELECT ... FOR UPDATE;