关于提交和回滚
来源:5-1 MyBatis数据插入操作
mixiaofan
2020-08-25 12:58:01
比如说Navicat是客户端,在Navicat中写了一个插入的SQL语句,然后选择执行,然后得到插入成功的影响了1条数据的信息。这里怎么体现了提交commit呢?
又比如写了一条连续插入三条信息的语句,结果其中有一条语句写错了数据类型,报错会回滚,这里有在哪里体现了回滚呢?
以及为什么需要设置手动提交而不是自动提交?
那些场景会需要手动提交?哪些需要自动提交?
3回答
好帮手慕小脸
2020-08-26
同学你好,undo日志用于存放数据被修改前的值,如果一个事务做回滚或某种原因执行失败了,需要根据undo日志中记录的原数据做数据恢复。所以打开项目执行操作时会记录id号。即一直增长id号。
如果我的回答解决了你的疑惑,请采纳,祝学习愉快~
好帮手慕小脸
2020-08-26
同学你好,
1、这里在回滚之前判断是否为null,是为了避免在获取session的时候发生异常,这样session并没有获取到,直接回滚会报空指针异常。
所以在catch中需要先判断一下session是否为空。
2、由于id是自增长的,以同学的描述来讲提没提交,表都会记录。只是未提交的数据会存放在undo日志中,所以去掉注释后再次运行会接着上一次打印的id号而不是表中的id号
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
好帮手慕小脸
2020-08-25
同学你好,
1、在Navicat中写了一个插入的SQL语句,然后选择执行,然后得到插入成功的影响了1条数据的信息。这里怎么体现了提交commit呢?
答:commit的作用是将数据更改提交给数据库。当编写完sql后,然后执行sql到数据库中可称之为提交
2、又比如写了一条连续插入三条信息的语句,结果其中有一条语句写错了数据类型,报错会回滚,这里有在哪里体现了回滚呢?
答:当添加数据错误时,新增的数据会回滚到之前没有新增时的状态
3、手动提交事务的好处: 当业务逻辑复杂时,可以根据具体需要来提交事务。
比如: 银行转账的业务,在A行取款和在B行存款相当于对两张表分别进行update操作。但一旦中间产生错误,需要这两个操作都回滚。这种情况下这两个sql需要绑定为一个事务。此时,不是在A取款后提交事务,而是在B存款也执行后,提交事务。
如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~
相似问题