博客
关于我
MySQL高级-MySQL锁
阅读量:789 次
发布时间:2023-02-13

本文共 1319 字,大约阅读时间需要 4 分钟。

锁概述

锁是协调多个进程或线程并发访问某一资源的机制,用于避免资源争抢。数据库中的锁可用于解决并发访问引起的数据一致性问题,如防止脏读、不可重复读等。锁机制对数据库性能也有重要影响,因此需要根据具体应用需求选择合适的锁类型。


锁分类

根据锁的粒度和作用类型,锁可以分为以下几种:

1. 数据操作粒度

  • 表锁:锁定整个表,适用于对查询为主、更新较少的应用。
  • 行锁:锁定当前操作的具体行,适合需要高并发和严格一致性的应用。

2. 数据操作类型

  • 读锁(共享锁):多个读操作可同时进行,不会互相影响。
  • 写锁(排它锁):阻断其他写锁和读锁,确保数据原子性。

MySQL 锁机制

MySQL的锁机制因存储引擎不同而有所差异,主要包括以下表锁类型:

存储引擎 表锁支持 行锁支持 页面锁支持
MyISAM 支持 不支持 不支持
InnoDB 支持 支持 不支持
MEMORY 支持 不支持 不支持
BDB 支持 不支持 支持

MySQL锁类型特点

锁类型 特点
表锁 偏向MyISAM,开销小,加锁快,不会导致死锁,锁定粒度大。
行锁 偏向InnoDB,开销大,加锁慢,可能导致死锁,锁定粒度最小。
页面锁 开销和加锁时间介于表锁和行锁之间,锁定粒度介于两者之间。

MyISAM 表锁

MyISAM默认支持表锁,不支持行锁。它会在执行SELECT时自动加读锁,在执行UPDATE、DELETE、INSERT时自动加写锁。

显示加锁语法

加读锁:lock table table_name read;加写锁:lock table table_name write;

读锁案例

  • 加读锁后查询:其他客户端可同时读,但不能写。
  • 加读锁后更新:更新操作会被阻塞,直到释放读锁。

写锁案例

  • 加写锁后查询:其他客户端无法读或写。
  • 加写锁后更新:更新操作会立即执行。

InnoDB 行锁

InnoDB默认支持行锁,其特点为:

  • 开销较大,加锁较慢。
  • 会出现死锁。
  • 锁定粒度最小,发生锁冲突概率最低。

行锁类型

  • 共享锁(S):允许多个事务读取数据。
  • 排他锁(X):阻止其他事务读或写。

行锁语法

  • 显示加共享锁SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE
  • 显示加排他锁SELECT * FROM table_name WHERE ... FOR UPDATE

间隙锁

InnoDB在使用范围条件时,会为不存在的记录加锁,这称为间隙锁(Next-Key锁)。例如,对于id < 10的查询,InnoDB会锁定所有id小于10的记录以及id=10的记录。


锁争用情况

使用SHOW OPEN TABLES 查看当前锁状态:

mysql> SHOW OPEN TABLES;

使用SHOW STATUS LIKE 'Table_locks%'; 查看锁争用情况:

mysql> SHOW STATUS LIKE 'Table_locks%';

总结

锁机制是数据库并发管理的核心。选择合适的锁类型需要综合考虑应用场景和性能需求。MyISAM的表锁适合读为主的应用,而InnoDB的行锁则更适合高并发和高一致性的场景。

转载地址:http://ohdfk.baihongyu.com/

你可能感兴趣的文章
mysql的常见八股文面试题
查看>>
MySQL的常见命令
查看>>
mysql的引擎以及优缺点_MySQL有哪些存储引擎,各自的优缺点,应用场景-阿里云开发者社区...
查看>>
MySQL的操作:
查看>>
mysql的数据类型有哪些?
查看>>
MYSQL的最左匹配原则的原理讲解
查看>>
mysql的语法规范
查看>>
MySql的连接查询
查看>>
mysql的配置文件参数
查看>>
MySQL的错误:No query specified
查看>>
mysql监控工具-PMM,让你更上一层楼(上)
查看>>
mysql监控工具-PMM,让你更上一层楼(下)
查看>>
MySQL相关命令
查看>>
mysql社工库搭建教程_社工库的搭建思路与代码实现
查看>>
Warning: Can't perform a React state update on an unmounted component. This is a no-
查看>>
mysql笔记 (早前的,很乱)
查看>>
MySQL笔记:InnoDB的锁机制
查看>>
mysql第一天~mysql基础【主要是DDL、DML、DQL语句,以及重点掌握存存引擎、查询(模糊查询)】
查看>>
mysql第二天~mysql基础【查询排序、分页查询、多表查询、数据备份与恢复等】
查看>>
MySQL简介和安装
查看>>