阿里面试:悲观锁是什么?有哪些实现方式?

悲观锁经常被问到,比如数据库悲观锁有哪些等,下面我来详解悲观锁@mikechen

MySQL悲观锁

阿里面试:悲观锁是什么?有哪些实现方式?-mikechen

悲观锁(Pessimistic Locking)是一种并发控制策略,适用于对数据冲突敏感的场景。

采用悲观锁的系统默认认为并发操作会产生冲突,因此在读或写操作时主动对数据加锁以防止其他事务并发修改。

直到当前事务完成后才释放锁,从而保证数据一致性和隔离性。

 

悲观锁的实现

在MySQL中,悲观锁主要通过关系型存储引擎提供的行级锁、或表级锁实现。

阿里面试:悲观锁是什么?有哪些实现方式?-mikechen

常见实现途径包括:

SELECT … FOR UPDATE:在事务中对查询到的行加排他锁(exclusive lock)。

比如:

 

开启事务:BEGIN;

查询并加锁:SELECT * FROM table WHERE id = 1 FOR UPDATE;

此时,其他事务如果也执行 FOR UPDATE 或者 UPDATE/DELETE 操作,会被阻塞,直到当前事务提交(COMMIT)或回滚(ROLLBACK)。

处理业务逻辑。

提交事务。

 

SELECT … LOCK IN SHARE MODE(较旧用法,支持共享锁)。

允许其他事务读取但阻止写入,适用于需要读取且不希望数据被修改的场景。

显式的LOCK TABLES/UNLOCK TABLES:对整张表加表级锁。

适用于不需要细粒度锁定的场景,但并发性能较差。

mikechen睿哥

10年+大厂架构经验,大厂面试官,就职于阿里、淘宝等一线大厂,操盘多个亿级数据量大厂核心项目。

评论交流
    说说你的看法