网站首页 > 教程文章 正文
大家好,我是mikechen。
MySQL悲观锁经常在大厂被问到,比如:MySQL悲观锁是什么?MySQL悲观锁有哪些?底层原理?等等,下面我来详解MySQL悲观锁@mikechen
MySQL悲观锁
悲观锁是一种常见的并发控制机制,用于在数据库操作期间防止多个事务对同一数据资源进行不一致的修改。
悲观锁的作用就是:能够防止并发冲突,确保数据的一致性和可靠性。
然而,悲观锁的缺点:可能会导致性能下降,尤其是在高并发的情况下。
原因就是:当一个事务想要修改一个被加锁的资源时,它必须先获取该资源的锁,这种等待可能会导致性能问题,因此悲观锁通常用于少量并发事务的场景。
数据库悲观锁的实现
数据库悲观锁主要有以下3种:
1.行级锁(Row-Level Locks)
在事务操作过程中,对数据库中某一行进行锁定,以保证在整个事务操作期间该行数据不被其他事务修改。
常见的行级锁包括 :SELECT ... FOR UPDATE 和 SELECT ... LOCK IN SHARE MODE 语句。
2.表级锁(Table-Level Locks)
在事务操作过程中,对整张表进行锁定,以保证在整个事务操作期间该表不被其他事务修改。
表级锁可以分为:共享锁(Shared Lock)和排他锁(Exclusive Lock)两种。
3.数据库级锁(Database-Level Locks)
在事务操作过程中,对整个数据库进行锁定,以保证在整个事务操作期间该数据库不被其他事务修改。
数据库级锁通常很少使用,因为它会阻塞整个数据库的访问,影响整个系统的性能。
数据库悲观锁的示例
在 MySQL 中,可以使用 SELECT ... FOR UPDATE 或者 SELECT ... LOCK IN SHARE MODE 语句来实现悲观锁。
例如,以下语句将会锁定 id 为 1 的行:
BEGIN;SELECT * FROM table_name WHERE id = 1 FOR UPDATE;-- 对查询结果进行修改COMMIT;
SELECT ... FOR UPDATE 语句可以锁定 SELECT 语句查询到的行,使得其他事务无法修改这些行,直到当前事务提交或回滚。
需要注意的是,在使用悲观锁时要避免死锁和性能问题。因此,应该选择恰当的锁粒度和并发度,以及避免在事务中过长时间持有锁。
以上
本文作者:mikechen
文章来源:mikechen.cc
猜你喜欢
- 2025-07-01 结合隔离级别RR和RC来详细讲解下MVCC和LBCC
- 2025-07-01 Java锁最全详解(独享锁+共享锁+公平锁+非公平锁+乐观锁+悲观锁)
- 2025-07-01 什么是悲观锁,什么是乐观锁,有什么区别
- 2025-07-01 MySQL进行行级锁的?一会next-key锁,一会间隙锁,一会记录锁?
- 2025-07-01 MySQL8行级锁(mysql如何加行级锁)
- 2025-07-01 二阶段提交的 prepare 阶段,binlog 和 InnoDB 各自会有哪些动作?
- 2025-07-01 看懂这篇文章,你就懂了数据库死锁产生的场景和解决方法
- 2025-07-01 深入理解MySQL锁机制原理(mysql锁的作用)
- 2025-07-01 一文由浅入深带你完全掌握MySQL的锁机制原理与应用
- 2025-07-01 MySQL InnoDB的行锁模式及加锁方法
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)