Mysql

首页 -  Mysql  -  innodb下的共享锁和排他锁

innodb下的共享锁和排他锁

innodb下的共享锁和排他锁

1.什么是共享锁,什么是排他锁?


共享锁也叫读锁,简称S锁,原理:一个事务获取了一个数据行的共享锁,其他事务能获得该行对应的共享锁,但不能获得排他锁,即一个事务在读取一个数据行的时候,其他事务也可以读,但不能对该数据行进行增删改。


排他锁也叫写锁,简称x锁,原理:一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁(排他锁或者共享锁),即一个事务在读取一个数据行的时候,其他事务不能对该数据行进行增删改查。


如何设置共享锁和排他锁?

设置共享锁:SELECT ... LOCK IN SHARE MODE;

设置排他锁:SELECT ... FOR UPDATE;


对于select 语句,innodb不会加任何锁,也就是可以多个并发去进行select的操作,不会有任何的锁冲突,因为根本没有锁。

对于insert,update,delete操作,innodb会自动给涉及到的数据加排他锁,只有查询select需要我们手动设置排他锁。


什么是意向共享锁,什么是意向排他锁?

意向共享锁,简称IS,其作用在于:通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加共享锁,那么此时innodb会先找到这张表,对该表加意向共享锁之后,再对记录A添加共享锁。

意向排他锁,简称IX,其作用在于:通知数据库接下来需要施加什么锁并对表加锁。如果需要对记录A加排他锁,那么此时innodb会先找到这张表,对该表加意向排他锁之后,再对记录A添加共享锁。


共享锁和意向共享锁,排他锁与意向排他锁的区别

共享锁和排他锁,系统在特定的条件下会自动添加共享锁或者排他锁,也可以手动添加共享锁或者排他锁。

意向共享锁和意向排他锁都是系统自动添加和自动释放的,整个过程无需人工干预。

共享锁和排他锁都是锁的行记录,意向共享锁和意向排他锁锁定的是表。


mysql配置文件设置

autocommit = 0;--事务自动提交 1为自动提交 0是取消自动提交


2. 排它锁与共享锁

排它锁:排它锁与排它锁不能一起使用,排它锁与共享锁不能一起使用

共享锁:共享锁与共享锁可以一起使用

(2)
分享:

本文由:xiaoshu168.com 作者:xiaoshu发表,转载请注明来源!

相关阅读