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的原子性保障了,要么事务提交成功,所有变更生效,要么事务未提交事务内所有变更都不生效。

相关推荐
聆风吟º9 分钟前
Oracle到KingbaseES数据库迁移:全流程实战指南与避坑总结
数据库·oracle·数据库迁移·kingbasees
哈__11 分钟前
Oracle至KingbaseES数据库迁移全攻略:痛点拆解、配置实操与问题排查
数据库·oracle
JZC_xiaozhong1 小时前
电商ERP如何同步订单数据到MySQL?集成方案解析
数据库·mysql·数据分析·etl工程师·嵌入式实时数据库·电商erp集成·数据集成与应用集成
消失的旧时光-19431 小时前
第四篇(实战): 订单表索引设计实战:从慢 SQL 到毫秒级
java·数据库·sql
知识分享小能手1 小时前
Oracle 19c入门学习教程,从入门到精通, Oracle 表空间与数据文件管理详解(9)
数据库·学习·oracle
zhengfei6112 小时前
Chroma DB — 未经授权的信息披露
数据库
KaiwuDB2 小时前
KaiwuDB 获评“2025 中国大数据产业年度国产化优秀代表厂商”
数据库
百***07453 小时前
一步API+Gemini 3.0 Pro进阶实战:多模态开发、性能调优与项目落地
数据库·microsoft
不想写bug呀3 小时前
Redis主从复制介绍
数据库·redis
颜颜yan_3 小时前
Oracle 迁移到 KingbaseES 实战:从评估到追平的一套可落地流程
数据库·oracle