MySQL中innerDB引擎的锁机制

InnoDB支持事务,InnoDB默认使用行级锁。

默认是行级锁,但有些情况,就会变成表级锁。下面用update的例子进行说明,表和数据如下:

一张用户信息表,ID是主键(主键默认带有索引)

表中有两条数据

行级锁

在innodb中只有利用索引的更新,删除操作,才可以使用行级锁。

同时在navicat中打开两个窗口,SQL语句如下:

在窗口1中执行begin开启事物,然后执行update操作,先不执行commit。

然后切换到窗口2中,执行begin开启事物,然后执行update操作。

此时发现窗口2中的update是可以执行的,没有因为窗口1中的事物没有提交而等待。说明用到的是行级锁。

表级锁

在innodb中,不能使用索引的写操作则是表锁。

修改表设计,把ID的主键去掉,此时ID字段就没有索引了。

去掉主键后,点击保存按钮。

下面进行SQL演示,打开两个命令窗口,操作如下:

在窗口1中执行begin开启事物,然后执行update操作,先不执行commit。

然后切换到窗口2中,执行begin开启事物,然后执行update操作。

此时可以看到,update操作一直处于阻塞状态,没有完成。

切回窗口1,执行commit命令。

执行完毕,切换到窗口2,此时update语句才执行完成

由此可以看出,当窗口1的事物没有提交时,窗口2的更新操作一直处于阻塞状态,虽然窗口2更新的记录与窗口1更新的记录不是同一条。也就说明,当写操作时,未使用索引的操作则是表锁。

相关推荐
自不量力的A同学13 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.13 小时前
Mysql
数据库·mysql
全栈前端老曹13 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG86313 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道13 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德14 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪14 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap
Coder_Boy_14 小时前
基于SpringAI的在线考试系统-整体架构优化设计方案
java·数据库·人工智能·spring boot·架构·ddd
fen_fen1 天前
Oracle建表语句示例
数据库·oracle
砚边数影1 天前
数据可视化入门:Matplotlib 基础语法与折线图绘制
数据库·信息可视化·matplotlib·数据可视化·kingbase·数据库平替用金仓·金仓数据库