【MySQL】悲观锁和乐观锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lsy1072/article/details/79472866

在MySQL中,提供了悲观锁和乐观锁处理并发问题。

悲观锁

所谓悲观锁,是指对数据被外界修改保持悲观态度,在整个操作过程当中,数据保持锁定状态。MySQL提供了悲观锁加锁机制。
- 使用步骤

//使用悲观锁
select *from student where id = 931 for UPDATE;

犹豫对“select *from student where id = 931 for update”使用了悲观锁,所以此时的所有该表的所有数据更新(不过我们需要注意一些锁的级别,MySQL InnoDB默认行级锁。行级锁都是基于索引的,如果一条SQL语句用不到索引是不会使用行级锁的,会使用表级锁把整张表锁住,这点需要注意。)操作不会写入到数据库。

乐观锁

乐观锁的实现不需要数据库提供支持,是通过逻辑实现的。可以通过在表的字段中添加版本字段或者时间戳,用于表示数据的版本状态。
实现思路
读取表中的某一条记录,保存该记录的版本号字段数据,当进行写入操作的,又一次读取该记录并比较版本字段的数据是否与之前读取的相同,如果相同则执行更新操作并将版本号加一操作,如果不相同则禁止更新操作,重新读取该字段数据并重复之前的操作。
乐观锁并不是一种具体的技术,而是一种处理逻辑或者是一种思想。

使用场景:
乐观锁适用于冲突比较少的场景,如果冲突比较频繁则会增加访问压力,这个时候应该使用悲观锁。

猜你喜欢

转载自blog.csdn.net/lsy1072/article/details/79472866