Mysql 8手动终止某个事务并释放其持有的锁

示范数据表

age具有index普通索引

在mysql数据库里的information_schema.INNODB_TRX表中存储有innodb的所有事务,我们可以查看该表来查看正在进行的事务

现在我开启一个事务,执行第1、2行SQL,启动事务并持有id=3的行锁

刷新事务表可以看到这个事务

我们可以看到事务ID为45188,trx_mysql_thread_id线程ID为33060

在表performance_schema.data_locks中可以看到mysql正在持有的锁
持有了行记录3的排它锁,且无间隙锁,锁类型是行锁,额外还获得了表锁的意向排他锁(意向跑排他锁不等于持有排它锁,只是表达一个意向,并没有持有这个表级排它锁)

终止这个事务,执行SQL

sql 复制代码
kill 事务对应的线程ID;

执行后可以看到事务和锁都消失了。那如果更新了数据但是没有提交,这样kill之后数据还能commit吗,数据会丢吗?

那试试

启动事务,锁定,更新

再开一个窗口建一个session去终止这个事务的线程

在另一个session终止改事务的线程后,回到原事务,执行commit;是可以执行的,再去数据表看最新数据发现,刚这个事务没有提交的数据变更是没有生效的。这是由innodb的原子性保障了,要么事务提交成功,所有变更生效,要么事务未提交事务内所有变更都不生效。

相关推荐
冒泡的肥皂1 小时前
MVCC初学demo(一
数据库·后端·mysql
.Shu.2 小时前
Redis Reactor 模型详解【基本架构、事件循环机制、结合源码详细追踪读写请求从客户端连接到命令执行的完整流程】
数据库·redis·架构
Bruce_Liuxiaowei4 小时前
MySQL完整重置密码流程(针对 macOS)
mysql
麦麦大数据5 小时前
F003疫情传染病数据可视化vue+flask+mysql
mysql·flask·vue·大屏·传染病
薛晓刚5 小时前
当MySQL的int不够用了
数据库
SelectDB技术团队5 小时前
Apache Doris 在菜鸟的大规模湖仓业务场景落地实践
数据库·数据仓库·数据分析·apache doris·菜鸟技术
星空下的曙光6 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓12016 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
染落林间色6 小时前
达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW
数据库·sql
之诺6 小时前
MySQL通信过程字符集转换
后端·mysql