Java相关

Mysql并发控制-锁

2020-04-01  本文已影响0人  万福来

Mysql并发控制-锁

共享锁

共享锁也称为读锁,读锁允许多个连接可以同一时刻并发的读取同一资源,互不干扰。

排他锁

排他锁也称为写锁,一个写锁会阻塞其他的写锁或读锁,保证同一时刻只有一个连接可以写入数据,同时防止其他用户对这个数据的读写。

锁策略

table lock(表锁)

    update table set columnA = "a" where columnB = "b";

如果上述sql语句中columnB字段不存在索引或者不是组合索引前缀,会进行锁表操作。
如果columnB字段创建索引后,那么会锁住满足where条件的行(行锁)。

row lock (行锁)

行锁可以最大限度的支持并发处理,当然也带来了最大开销,加锁慢,行锁的粒度在每一行数据。

InnoDB 间隙锁

当我们用范围条件而不是相等检索数据,并请求共享或排他锁时,InnoDB会给符合条件的已有数据记录的索引项加锁;对于键值在条件范围内但是并不存在的记录,叫做“间隙(GAP)”,InnoDB也会对这个间隙加锁,这种锁机制就是间隙锁(Next-Key锁)。
很显然,在使用范围条件检索并锁定记录时,InnoDB这种加锁机制会阻塞符合条件范围内键值得并发插入,造成严重的锁等等。所以应尽量使用相等条件访问更新数据。
间隙锁的目的:

显式锁 与 隐式锁
隐式锁:我们上文说的锁都属于不需要额外语句加锁的隐式锁。
显示锁:

SELECT ... LOCK IN SHARE MODE(加共享锁);
SELECT ... FOR UPDATE(加排他锁);
上一篇下一篇

猜你喜欢

热点阅读