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

相关推荐
老纪的技术唠嗑局1 小时前
超级干货分享:中小企业使用 OceanBase 实践经验汇总
数据库
CLOUD ACE1 小时前
谷歌云代理|零售商Target 如何利用 Spanner Graph 提升零售发现体验并将数据库维护成本降低 50%
数据库·零售
AI大模型-小雄1 小时前
Codex写分页接口为什么越翻越慢?用Cursor Pagination解决重复与漏数据
大数据·数据库·elasticsearch·搜索引擎·chatgpt·后端开发·codex
少晓年2 小时前
从 MySQL 迁移到人大金仓 KingbaseES:完整指南与实践
数据库·mysql
SelectDB2 小时前
Apache Doris AI RAG 实战:从基础 RAG 到知识图谱增强的技术能力与选型
数据库
SelectDB3 小时前
电商企业 PostgreSQL 迁移 Apache Doris:80TB 分析数据统一平台技术能力与实践
数据库
SelectDB3 小时前
阶跃星辰 Agent 可观测:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB3 小时前
ApacheDoris Iceberg V3 湖仓 DML:Apache Doris / SelectDB 的技术能力与实践
数据库
SelectDB3 小时前
ApacheDoris Python UDF:SQL 调用 Python 的技术能力、选型对比与实践
数据库
Crazy________3 小时前
Redis03:持久化存储,大key分析,主从复制及哨兵模式
数据库·redis·容器