MySQL 共享锁和排他锁
MySQL 的共享锁和排他锁都属于悲观锁(参考:)
共享锁
共享锁又称读锁,简称 S 锁,多个事务可以同时为同一数据加共享锁。数据被添加共享锁后可以被多个事务同时读取,但是无法被修改。
MySQL 共享锁实现:
SELECT ... LOCK IN SHARE MODE
排他锁
排他锁又称写锁,简称 X 锁,排他锁不能与其它锁共存,一旦一个事务获取了某一数据的排他锁,则其它任何事务都无法再获取该数据的其它锁,包括共享锁和排他锁。只有获取到排他锁的事务本身可以对该数据执行读取和修改操作。
MySQL 排他锁实现:
SELECT ... FOR UPDATE
MySQL InnoDB 存储引擎会自动为 INSERT
、UPDATE
、DELETE
操作涉及的数据添加排他锁,SELECT
默认不添加任何锁。