Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧

学习Mybatis时提到了JDBC方式需要自己手动提交事务,如果不加session.commit会导致数据库的数据无法正常插入(程序本身又不给你报错,还装出一副我已经插入成功的样子)

SqlSession session = sessionFactory.openSession();

如果要自动提交的话加个参数就好啦

SqlSession session = sessionFactory.openSession(true);//自动提交

手动提交的话

SqlSession session = sessionFactory.openSession(false);//手动提交,其实就是默认的那种情况

 

后面去查了一下这个默认提交方式....发现mysql好像数据库本身也有个默认提交方式(自动提交)

发现自动提交可能会产生某些可怕的后果(某些删除操作写错就凉了),所以我决定把mysql的自动提交给关闭掉!(犹豫就会败北!)

 

有的小伙伴可能会好奇会有什么后果,举个例子:你要删除一个班和一个班的所有学生的时候,你删除一个班的时候没问题,然后删除学生出现了异常停止了,然而你的删除班级指令已经提交了..然后你会发现你没有了家(学生还在,班级没了)~~~~~嘤嘤嘤

 

p.s. 只有innero db类型的表才可以设置autocommit;

 

方式一、

禁用步骤:

1、在执行inser / update / delete之前 先执行一个begin;语句,进行了一段时间的数据库操作之后使用commit提交所有操作或者使用rollback回滚所有操作

p.s. 方式一要注意,一次commit或一次rollback表示最近一个begin到此次commit或rollback之间的操作都将提交或回滚,这之后的操作都必须重新设置begin,否则还会继续使用autocommit=ON的策略

 

方式二、

1、登录mysql数据库

2、set autocommit='off';

3、查看是否警用: show variables like "autocommit";                                                   (如果是OFF表示禁用成功)

4、执行一段insert / update / delete语句,检查无错误之后commit;这样,这段时间内的所有操作都将提交到数据库中,如果发现执行了不正确的insert / update / delete语句,则使用rollback,此时将会回滚到上一个commit之后数据库的状态



posted on 2019-04-21 00:37  岚者小轩  阅读(2866)  评论(0编辑  收藏  举报