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
kill 事务对应的线程ID;
执行后可以看到事务和锁都消失了。那如果更新了数据但是没有提交,这样kill之后数据还能commit吗,数据会丢吗?
那试试
启动事务,锁定,更新
再开一个窗口建一个session去终止这个事务的线程
在另一个session终止改事务的线程后,回到原事务,执行commit;是可以执行的,再去数据表看最新数据发现,刚这个事务没有提交的数据变更是没有生效的。这是由innodb的原子性保障了,要么事务提交成功,所有变更生效,要么事务未提交事务内所有变更都不生效。
本文来自博客园,作者:HumorChen99,转载请注明原文链接:https://www.cnblogs.com/HumorChen/p/18039444
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2020-10-07 Geetest极验+VUE把验证码绑定到自己的按钮(例如获取验证码)