📜  共享锁和排他锁之间的区别(1)

📅  最后修改于: 2023-12-03 15:07:04.768000             🧑  作者: Mango

共享锁和排他锁之间的区别

数据库中两种常见锁的类型是共享锁和排他锁。

共享锁

共享锁也称为读锁,是指多个事务可以同时并发获取并持有同一数据对象的锁,不会产生冲突。共享锁不允许对数据对象进行修改,只能进行读取操作。

共享锁在实现中是不会阻塞其他事务的共享锁,但是会阻塞其他事务的排他锁。所以共享锁不能防止并发事务之间的数据冲突,但是可以提高并发度。

在MySQL中,可以使用以下SQL语句对一张表加上共享锁:

SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
排他锁

排他锁也称为写锁,是指在一个事务获取并持有这个数据对象的锁之后,其他事务就不能再获取该数据对象的锁,直到该事务释放锁。排他锁防止并发事务之间数据的读写冲突。

和共享锁不同的是,排他锁在实现中会阻塞其他事务的共享锁和排他锁,因此使用排他锁的时候会导致并发度下降。

在MySQL中,可以使用以下SQL语句对一张表加上排他锁:

SELECT * FROM table_name WHERE ... FOR UPDATE;
共享锁和排他锁的区别
  • 共享锁多个事务可以同时并发获取,并且不会阻塞其他事务的共享锁,但是会阻塞其他事务的排他锁。排他锁只能由一个事务获取并持有。
  • 共享锁只能用于读取操作,不能修改数据对象;而排他锁既可以读取数据对象,也可以修改数据对象。
  • 共享锁不能保证数据一致性,但是可以提高并发度;而排他锁保证了数据的一致性,但是会影响并发度。

需要根据实际应用场景选择使用共享锁还是排他锁。

参考资料:MySQL官方文档