递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 563|回复: 4
打印 上一主题 下一主题

[视窗] MYSQL的自动提交事务,影响比较大

[复制链接]

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
跳转到指定楼层
楼主
发表于 2024-10-9 01:37:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 hs999xl 于 2024-10-9 01:54 编辑

从MYSQL连接池取出一个连接置给局部变量_MYSQL数据库对象,然后自动提交事务 = 假。然后执行一堆SQL语句后,开始提交事务(),然后释放连接,但最后自动提交事务没有置回真。此时我发现其他的数据库操作出现异常了,比如我有个读数据库表记录的操作就读不出来。后来我在事务执行完毕后把自动提交事务=真,此时发现其他的数据库操作又恢复正常了。


从数据库连接池取出的一个连接,设置的自动提交事务,是不是也同步把连接池里所有连接对象的值也设置了?还是连接池里的所有连接对象其实是读取同一个属性对象?


如果执行需要手动提交事务的方法时,有个不需要手动提交事务的方法也在执行,那不是出现异常了?

回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40517
5#
发表于 2024-10-9 19:33:54 | 只看该作者
hs999xl 发表于 2024-10-9 09:23
经过多次测试:
如果开始提交事务()后,不将自动提交事务 = 真,那么会影响其他方法读数据库记录。
有没 ...

这个属性值如果默认为假,那么取出来的连接肯定也都是默认为假的。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
地板
 楼主| 发表于 2024-10-9 09:23:26 | 只看该作者
创世魂 发表于 2024-10-9 08:06
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性 ...

经过多次测试:
如果开始提交事务()后,不将自动提交事务 = 真,那么会影响其他方法读数据库记录。
有没有可能,后续方法取到的数据库连接对象,它的自动提交事务属性=假,所以导致它的某些操作失败?
回复

使用道具 举报

73

主题

338

帖子

2013

积分

金牌会员

嘿嘿哈哈

Rank: 6Rank: 6

积分
2013
板凳
 楼主| 发表于 2024-10-9 08:53:01 | 只看该作者
本帖最后由 hs999xl 于 2024-10-9 09:26 编辑
创世魂 发表于 2024-10-9 08:06
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性 ...

用完后要把这个属性置回真吗?如果不置回,其他方法取连接池会不会又取到属性为假的,然后就执行失败了。
回复

使用道具 举报

444

主题

1万

帖子

4万

积分

超级版主

Rank: 8Rank: 8

积分
40517
沙发
发表于 2024-10-9 08:06:20 | 只看该作者
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性是mysql数据库自带的方法,没有包装过。按照常规的程序设计逻辑来说,这种类型的属性,应该默认为假。
所以你干脆重新测试一下,然后测试的时候就别管这个属性。省的出问题。
安卓无障碍实战课:点击查看
交流群:641526939
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2024-11-23 00:35 , Processed in 0.087497 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表