mysql 中的共享锁和排他锁

共享锁(share lock)

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获取共享锁的事务只能读取数据,不能修改数据。

用法:select ... lock in share mode

在查询语句后面增加 lock in share mode,mysql 会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。

排他锁(exclusive lock)

排他锁又称写锁,如果事务 T 对数据 A 加上排他锁后,则其他事务不能再对 A 加任何类型的锁。获取排他锁的事务既能读数据,又能修改数据。

用法:select ... for update

在查询语句后面增加 for update,mysql 会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。

需要注意的是:在事务中,锁才会生效。

猜你喜欢

转载自www.cnblogs.com/eleven24/p/9147887.html