MySQL锁机制
锁机制是为了解决数据库的并发控制问题而产生的。如在同一时刻,客户端对同一个表做更新或查询操作,为了保证数据的一致性,必须对并发操作进行控制。同时,锁机制也为实现 MySQL 的各个隔离级别提供了保证。
可以将锁机制理解为使各种资源在被并发访问时变得有序所设计的一种规则。
如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库显得尤其重要,也更加复杂。本节我们先简单介绍一下锁机制及常见的锁类型。
按锁级别分类,可分为共享锁、排他锁和意向锁。也可以按锁粒度分类,可分为行级锁、表级锁和页级锁。下面我们先介绍共享锁、排他锁和意向锁。
1. 共享锁共享锁的代号是 S,是 Share 的缩写,也可称为读锁。是一种可以查看但无法修改和删除的数据锁。
共享锁的锁粒度是行或者元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。会阻止其它事务获得相同数据集的排他锁。
2. 排他锁排他锁的代号是 X,是 eXclusive 的缩写,也可称为写锁,是基本的锁类型。
排他锁的粒度与共享锁相同,也是行或者元组。一个事务获取了排他锁之后,可以对锁定范围内的数据执行写操作。允许获得排他锁的事务更新数据,阻止其它事务取得相同数据集的共享锁和排他锁。
如有两个事务 A 和 B,如果事务 A 获取了一个元组的共享锁,事务 B 还可以立即获取这个元组的共享锁,但不能立即获取这个元组的排他锁,必须等到事务 A 释放共享锁之后才可以。
如果事务 A 获取了一个元组的排他锁,事务 B 不能立即获取这个元组的共享锁,也不能立即获取这个元组的排他锁,必须等到 A 释放排他锁之后才可以。
3. 意向锁为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB 还有两种内部使用的意向锁。
意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁(IS)和意向排他锁(IX)两类。
意向共享锁表示一个事务有意对数据上共享锁或者排他锁。 有意 表示事务想执行操作但还没有真正执行。
锁和锁之间的关系,要么是相容的,要么是互斥的。
锁 a 和锁 b 相容是指:操作同样一组数据时,如果事务 t1 获取了锁 a,另一个事务 t2 还可以获取锁 b; 锁 a 和锁 b 互斥是指:操作同样一组数据时,如果事务 t1 获取了锁 a,另一个事务 t2 在 t1 释放锁 a 之前无法释放锁 b。
锁模式的兼容情况
其中共享锁、排他锁、意向共享锁、意向排他锁相互之间的兼容/互斥关系如下表所示,其中 Y 表示相容,N 表示互斥。
如果一个事务请求的锁模式与当前的锁兼容,InnoDB 就将请求的锁授予该事务;反之,如果两者不兼容,该事务就要等待锁释放。
为了尽可能提高数据库的并发量,需每次锁定的数据范围越小越好,越小的锁其耗费的系统资源越多,系统性能下降。为在高并发响应和系统性能两方面进行平衡,这样就产生了 锁粒度 的概念。
24053.html
mysql相关文章
- Mysql逻辑架构介绍
- MySQL Error number: MY-011588; Symbol: ER_GRP_RPL_UNABLE_TO_KILL_CONN_REC_DONOR_APPLIER; SQLSTATE: HY000 报错 故障修复 远程处理
- 遇到一个MySQL小问题 Data truncation: Out of range value for column ‘huid’ at row 1详解数据库
- MySQL 双主复制 :可靠保障数据安全(mysql双主复制)
- MySQL中特殊字符转义技巧(mysql特殊字符转义)
- MySQL本地密码恢复:找回忘记密码(mysql本地密码忘记)
- 实用MySQL数据库转换工具推荐(mysql数据库转换工具)
- 深入MySQL:学会正确插入数据(mysql插入数据)
- 修改腾讯云MySQL默认密码(腾讯云mysql默认密码)
- 合并从MySQL中组合多条SQL语句(mysql多条sql)
- 利用MySQL绘制精美的ER图(mysql创建er图)
- 解密MySQL日期函数今天在MySQL中怎么表示(mysql中今天怎么表示)
- C语言与MySQL结合开发测试程序(c 与mysql测试程序)
- MySQL表中的数据计算利用两表列做减法(mysql两表列做减法)
- 使用CMD管理MySQL 快捷有效的维护方式(cmd 管理mysql)
- 如何使用Cmd连接MySQL(cmd 使用mysql)
- MySQL数据库新增方法(mysql中加数据库)
- 如何处理MySQL一百亿数据(mysql一百亿数据)
- 使用MySQL优化查询效率,处理一亿条数据(mysql 一亿)
- MySQL如何实现将数据写入文件(mysql_写入文件)
- MySQL安装步骤详解,让你轻松下载安装(mysql下载安装步骤)