千家信息网

MYSQL事务错误不回滚的问题怎么解决

发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,本篇内容介绍了"MYSQL事务错误不回滚的问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年02月24日MYSQL事务错误不回滚的问题怎么解决

本篇内容介绍了"MYSQL事务错误不回滚的问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

大约两个礼拜前有同学抛出这个图片问是怎么回事, 没有时间随即记下,有时间来处理。假期本来想懒懒,但答应人家的事情,是要做的。

实际上,上面的图是一个很经典的MYSQL的 record locks 的问题, 问题的起因应该是 testdb.a 这张表的某条记录,例如

select name from a where name = 'Jassica' for update;

在操作时,如果有其他语句在另一个session中也操作 name = 'Jassica' 这条记录,就可能会产生上面的情况。

官方的文档也是这样说的,但实际上估计有人会不大信服, 怎么能模拟出那个show engine innodb status 中出现的上述的锁信息。

下面我们就来做一做看看怎样的情况能出现上面的信息

1 请创建一个简单的表,具体有多简单,1 要有主键, 2 要有一个非主键的字段,例如varchar(30), 然后输入一些信息,类似下面这样。

然后启动两个 sessions

1 session 1 begin;

2 session 1 update a set name = 'aaa' where name > 'PPP';

3 session 2 begin;

4 session 2 update a set name = 'PPP' where name > 'Jassica';

然后和上面同学给我的截图类似的锁的信息就有了。

这里有两个问题

1 name > 'PPP' 我们并不知道到底有几个记录被UPDATE

2 name > 'Jassica" 又有几条记录我们也不知道

问题1 有5条记录被更新, 符合name > 'PPP' 的有5条记录

问题2 > 'Jassica' 的

所以死锁信息中

的信息就是 sinomina , x_professor, x_man 四条记录。

与SESSION 2 中的要更新的 5条记录,有冲突。

以上均在MYSQL 8.019 RC 模式下。

到此出现错误的信息的原因大概是弄清了, 其实到这里我们今天的主题才刚刚开始,问题是如果在 update 语句之前事务中还有其他的udpate语句, 到底是回滚不回滚。

答案是: 不 不 不回滚

我们看一下是不是这样

1 session 1 begin;

2 session 1 update a set name = 'aaa' where name > 'PPP';

3 session 2 begin;

4 session 2 update a set name = '111111' where name = 'PPP';

5 session 2 update a set name = 'PPP' where name > 'Jassica';

6 session 1 commit;

7 session 2 commit;

session 2 失败了, 到底 PPP 变成了 111111 吗? 这就是今天关键,按照传统数据库来说, 当然是不能,应该全部回滚。

那你的MYSQL 这里一8.019 为例 , 答案是什么。

答案:不出所料,如果你的失败的事务上面有其他的DML语句,一定会被执行

这就和SQL SERVER 默认的事务执行的方式一样, 如果事务错误,则上面执行的就不回 OMG, 我想着绝对和开发人员想的不大一样。

实际上MYSQL 和 SQL SERVER 一样,具体SQL SERVER 怎么做避免这个问题(请自行百度,或查找之前很久写过这样的文字)。

这里不管SQL SERVER , MYSQL 实际上有一个参数默认是 disabled

我们需要打开, innodb_rollback_on_timeout = 1 这个参数。他的功能是,自动回滚不会发生InnoDB锁等待超时错误。并且这个参数需要关闭MYSQL 在配置文件中配置,在重启动生效。

session 2

session 1

所以,如果有开发反应数据库的数据不大对头的时候,那DB门是不是要关注这个参数是ENABLED OR DISABLED。

"MYSQL事务错误不回滚的问题怎么解决"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

问题 信息 事务 错误 实际 参数 实际上 语句 不大 两个 情况 数据 答案 面的 内容 同学 就是 数据库 时间 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 计算机网络技术对口升学学校 什么数据库可以导出json 开启数据库的指令 java 数据库增量更新 农行软件开发上海知乎 敏捷软件开发流行工具 软件开发方法和软件开发方法学 与教育局软件开发战略协议 dsp软件开发跳槽 山东网络安全技能大赛科来杯 快盘数据库损坏 网络安全法不少于多少月 软件开发八二原则 学软件开发自身条件 郴州市安卓软件开发培训哪家好 环保币网络安全性 实效开展网络安全宣传周活动 网络安全工程师自学步奏书籍 哪些企业服务器放在贵州云服务器 纪录小康工程国家数据库 软件开发者信息怎么调出来 内蒙古智慧团建软件开发公司 内存对数据库的影响吗 服务器与空间的区别 小学生网络安全知识内容视频 滴滴打车网络技术部 蒂森克虏伯电梯服务器快车调试 2018网络安全宣传意义 普洱互联网科技找哪家 互联网科技展厅有哪些
0