递归火山软件开发平台

标题: MYSQL的自动提交事务,影响比较大 [打印本页]

作者: hs999xl    时间: 2024-10-9 01:37
标题: MYSQL的自动提交事务,影响比较大
本帖最后由 hs999xl 于 2024-10-9 01:54 编辑

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


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


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


作者: 创世魂    时间: 2024-10-9 08:06
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性是mysql数据库自带的方法,没有包装过。按照常规的程序设计逻辑来说,这种类型的属性,应该默认为假。
所以你干脆重新测试一下,然后测试的时候就别管这个属性。省的出问题。
作者: hs999xl    时间: 2024-10-9 08:53
本帖最后由 hs999xl 于 2024-10-9 09:26 编辑
创世魂 发表于 2024-10-9 08:06
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性 ...

用完后要把这个属性置回真吗?如果不置回,其他方法取连接池会不会又取到属性为假的,然后就执行失败了。
作者: hs999xl    时间: 2024-10-9 09:23
创世魂 发表于 2024-10-9 08:06
这个属性是mysql数据库类的属性,不是连接池统一的属性。设置肯定是只针对这个数据库对象的。
另外这个属性 ...

经过多次测试:
如果开始提交事务()后,不将自动提交事务 = 真,那么会影响其他方法读数据库记录。
有没有可能,后续方法取到的数据库连接对象,它的自动提交事务属性=假,所以导致它的某些操作失败?
作者: 创世魂    时间: 2024-10-9 19:33
hs999xl 发表于 2024-10-9 09:23
经过多次测试:
如果开始提交事务()后,不将自动提交事务 = 真,那么会影响其他方法读数据库记录。
有没 ...

这个属性值如果默认为假,那么取出来的连接肯定也都是默认为假的。




欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4