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

相关推荐
jason成都10 分钟前
实战 | 国产数据库 R2DBC-JDBC 桥接踩坑记 - JetLinks适配达梦数据库
java·数据库·物联网
田超凡10 分钟前
深入理解MySQL_6 Temporary临时表
mysql·java-ee
Elastic 中国社区官方博客13 分钟前
使用 Elasticsearch 管理 agentic 记忆
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
小宇的天下18 分钟前
Calibre 3Dstack --每日一个命令day13【enclosure】(3-13)
服务器·前端·数据库
云和数据.ChenGuang28 分钟前
达梦数据库安装服务故障四
linux·服务器·数据库·达梦数据库·达梦数据
尽兴-1 小时前
MySQL 8.0主从复制原理与实战深度解析
数据库·mysql·主从复制
Mr_sun.1 小时前
Day04——权限认证-基础
android·服务器·数据库
百锦再1 小时前
国产数据库现状与技术演进
数据库·python·plotly·flask·virtualenv·pygame·tornado
煎蛋学姐1 小时前
SSM学生会综合管理系统8berj(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·计算机毕业设计·ssm 框架·学生会综合管理系统
YongCheng_Liang2 小时前
MySQL 高级特性深度解析:从索引优化到高可用架构
运维·数据库·mysql