不回滚会怎么样

来源:5-2 JDBC的手动事务开发技巧

WittChen

2021-05-15 13:25:05

问题描述:

不回滚会出现什么情况

尝试过的解决方式:

在问题区域搜索到这个同学和我一样的疑惑,但是老师的答案我没听明白

https://class.imooc.com/course/qadetail/285909

这里老师说开起了事务机制

这句话我就更疑惑了,MySQL本来就是有事务机制的,还需要开启关闭吗?课程中也从来没有讲过开启关闭事务的内容,只是讲了手动提交和自动提交的,所以我现在被弄得云里雾里的

写回答

2回答

好帮手慕小脸

2021-05-15

同学你好,在同一事务条件下,回滚和不提交,表现是一样的,事务处理,是将操作事件交给数据库(模拟)运行,直到commit操作,才使得修改实际产生效果,你可以看做是未提交事务都是处于一个临时库中进行回滚是对于同一个事务,如果产生了错误,那么取消这个临时库中的操作,不对实际数据产生影响。

如果不回滚,这些临时操作会持续到这个个connection结束为止,也就是虽然你看不到,但是临时库的操作依然存在,而回滚是即时生效,其实都是回滚了,只是时间点的不一样

如果这个connection持续的时间长,就会锁着这个表,则会造成其他的问题。

所以我们还是需要进行回滚的。

祝学习愉快~

0

好帮手慕小脸

2021-05-15

同学你好,

1、这里同学说的不回滚是指只将如下代码注释吗?

http://img.mukewang.com/climg/609f89b209cd034905930169.jpg

如果是,这种情况是Connection并没有进行提交,代码在执行到conn.commit之前,就已经抛出了异常,所以是没有执行成功的

2、JDBC默认使用的是自动提交模式,为了避免数据不完整这种情况就需要调用conn.setAutoCommit(false);来关闭自动提交

祝学习愉快~

0
hittChen
hp>我的意思是我作为一位开发者,写某一个接口的时候,忘记使用使用回滚操作了,也没有commit,会引起什么大问题吗,是不是部分操作会写到事务区当中,这时另外一个接口执行了commit就会一起把之前未回滚操作的数据写到表中

h021-05-15
共2条回复

0 学习 · 16556 问题

查看课程