千家信息网

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

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇内容介绍了"MYSQL事务错误不回滚的问题怎么解决"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
千家信息网最后更新 2025年01月23日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安全错误 数据库的锁怎样保障安全 2021中职数据库考试题及答案 软件手机软件开发公司 网络安全品牌深信服奇安信启明星 河南齐游网络技术有限公司郭斌 大连软件开发工程师待遇 车载网络技术的理解 房间与服务器通讯失败是怎么回事 电子商务网络技术实验 数据库中创建日期的数据类型 网站登录服务器无响应 软件开发有哪几种接口 在培训机构学软件开发靠谱吗 训练模式为什么连不上服务器 ftp服务器配置要求高不 高级软件开发职能 网络安全领域个人述职报告 超星公司的数据库 服务器已打开为什么手机连不上网 bbs论坛服务器迁移 民用航空网络安全定级指南 网络安全行业的社会分析 网络技术服务的范畴 tsvn管理服务器权限 c语言软件开发的工具有哪些 网络安全的微信公众号 一直显示找不到服务器ip地址 阴阳师服务器多久上藏宝阁 网络安全说的HW是啥 数据库怎么字段值顺序 香港签署软件开发合同的税率
0