mysql 共享锁和排它锁

一:mysql锁机制分为表级锁和行级锁,行级锁里面又有共享锁和排他锁。

注意表的引擎类型要使用INNODB
表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行
行级:引擎 INNODB ,单独的一行记录加锁

二:共享锁又称为读锁

简称S锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

select ...lock in share mode语句

注意:多个事务对于同一数据可以不能同时有共享锁和排他锁

三:排他锁又称为写锁

简称X锁,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

select ...for update语句

注意:排他锁指的是一个事务在一行数据加上排他锁后,其他事务不能再在其上加其他的锁。mysql InnoDB引擎默认的修改数据语句,update,delete,insert都会自动给涉及到的数据加上排他锁,select语句默认不会加任何锁类型,所以加过排他锁的数据行在其他事务种是不能修改数据的,也不能通过for update和lock in share mode锁的方式查询数据,但可以直接通过select ...from...查询数据,因为普通查询没有任何锁机制

四:验证排它锁

1:一个事务加排他锁,另一个共享锁获取不到

白俊遥博客

2:一个事务加排他锁,另一个排他锁获取不到

白俊遥博客

3:一个事务加排他锁,另一个普通查询(select)能获取到,因为没有任何锁机制

白俊遥博客

4:一个事务加排他锁,另一个update,delete,insert不能获取到,因为会自动加上排他锁

白俊遥博客

5:一个事务加排他锁,可以在事务里面对数据就行读取和修改。

白俊遥博客

五:验证共享锁

1:一个事务加共享锁,另一个排他锁获取不到 共享锁和排他锁不能共存

白俊遥博客

2:一个事务加共享锁,另一个共享锁能获取到

白俊遥博客

3:一个事务加共享锁,另一个普通查询(select)能获取到,因为没有任何锁机制

白俊遥博客

4:一个事务加共享锁,另一个update,delete,insert不能获取到,因为会自动加上排他锁 共享锁和排他锁不能共存

白俊遥博客

5:一个事务加共享锁,可以在事务里面对数据就行读取和修改。

白俊遥博客

六:update,insert,delete 自动加排他锁

1:排他锁和排他锁

白俊遥博客

2:排他锁和共享锁

白俊遥博客

3:排他锁和普通查询

白俊遥博客


白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论