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更新的记录不是同一条。也就说明,当写操作时,未使用索引的操作则是表锁。

相关推荐
tedcloud1237 分钟前
HyperFrames部署教程:用HTML生成MP4视频
前端·数据库·人工智能·html·音视频
布朗克16813 分钟前
25 IO流高级操作——序列化、NIO与Files工具类
java·数据库·io·nio
阿演15 分钟前
DataDjinn 新版本更新:新增 Oracle 支持,查询窗口、表预览和连接树继续打磨
数据库·oracle·ai编程·数据库连接工具
lixora34 分钟前
Oracle 11g Active Data Guard Go 自动化部署工具 v1.0
数据库·oracle
Nturmoils34 分钟前
自增主键别只会 auto_increment,先把值从哪来讲清楚
数据库·后端
叶小鸡42 分钟前
Java 篇-项目实战-AI 天机学堂(从 0 到 1)-day5
数据库·redis·缓存
mN9B2uk171 小时前
大数据量高并发的数据库优化
服务器·数据库·oracle
Database_Cool_1 小时前
PolarSearch AutoETL:让数据库内置搜索不再需要搬运工
数据库
AI行业学习1 小时前
CC-Switch v3.16.1 官方下载 | 安装配置详细教程【2026.6.10】
java·开发语言·vue.js·python·mysql·eclipse·html
用户3074596982072 小时前
乐观锁与悲观锁
mysql