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之后数据库的状态
Mybatis的JDBC提交设置/关闭mysql自动提交------关于mysql自动提交引发的惨剧的更多相关文章
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
- 关于 MyBatis MyBatis-Spring Jdbc 批量插入的各种比较分析
因为目前SME项目中编写了一套蜘蛛爬虫程序,所以导致插入数据库的数据量剧增.就项目中使用到的3种DB插入方式进行了一个Demo分析: 具体代码如下: 1: MyBatis 开启Batch方式,最普通的 ...
- (七) SpringBoot起飞之路-整合SpringSecurity(Mybatis、JDBC、内存)
兴趣的朋友可以去了解一下前五篇,你的赞就是对我最大的支持,感谢大家! (一) SpringBoot起飞之路-HelloWorld (二) SpringBoot起飞之路-入门原理分析 (三) Sprin ...
- MyBatis、JDBC相关知识
引言 在mybatis的基础知识中我们已经可以对mybatis的工作方式窥斑见豹.但是,为什么还要要学习mybatis的工作原理?因为,随着mybatis框架的不断发展,如今已经越来越趋于自动化,从代 ...
- Mybatis Generator的model生成中文注释,支持oracle和mysql(通过实现CommentGenerator接口的方法来实现)
自己手动实现的前提,对maven项目有基本的了解,在本地成功搭建了maven环境,可以参考我之前的文章:maven环境搭建 项目里新建表时model,mapper以及mapper.xml基本都是用My ...
- 为什么使用Mybatis对JDBC进行包装探究
一.原生JDBC在实际生产中使用存在的影响性能的问题 首先分析使用JDBC的代码: Connection connection = null; PreparedStatement preparedSt ...
- mysql源码解读之事务提交过程(二)
上一篇文章我介绍了在关闭binlog的情况下,事务提交的大概流程.之所以关闭binlog,是因为开启binlog后事务提交流程会变成两阶段提交,这里的两阶段提交并不涉及分布式事务,当然mysql把它称 ...
- paip.环境设置 mybatis ibatis cfg 环境设置
paip.环境设置 mybatis ibatis cfg 环境设置 三部分 //////////1. 电泳.... ............2. 猪配置文件 com/mijie/homi/searc ...
- 利用Keepalived+mysql构建高可用MySQL双主自动切转
转载:http://www.it300.com/index.php/article-15266.html 关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储, ...
随机推荐
- Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.4.1:clean (default-clean) on project
在maven项目中 启动了2个tomcat,只能启动一个.
- MongoDB - 1
MongoDB - 1 一.初识MongoDB 之 什么东西都得先从理论入手,你说是不是啊? MongoDB 是一个基于分布式文件存储的数据库.由 C++ 语言编写.旨在为 WEB 应用提供可扩展 ...
- (纠错)JSP数据库判断是否存在
- 矢量水听器 近场 远场 --------------------常规波束形成,MVDR的比较
摘自<水平线阵的反卷积常规波束形成>,IRONMAN--------------------------------------------------- 在常规的波束形成中,是将阵列上的 ...
- 切面编程AOP之Castle.Core
1.Nuget中搜索Castle.Core并install 2.创建一个普通的类(注意类中只有标记virtual才能实现拦截 ) public class TestInterceptor { publ ...
- c#pc上测试微信端企业公众商城个人中心链接的工具JMeter
工具 Apache JMeter 抓包工具,支持回放功能 安装JMeter http://jmeter.apache.org/download_jmeter.cgi 下载页 下边是下载链接 h ...
- linux 网络虚拟化: network namespace 简介
linux 网络虚拟化: network namespace 简介 network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息.不管是虚拟机还是 ...
- Python 中 Iterator和Iterable的区别
Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器.为什么? 因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的 ...
- ConcurrentQueue并发队列
表示线程安全的先进先出 (FIFO) 集合 System.Collections.Concurrent 命名空间提供多个线程安全集合类.当有多个线程并发访问集合时,应使用这些类代替 System.Co ...
- vue与js混用
Vue 的官方是不建议直接操作 DOM 的,Vue 的用途在于视图和数据的绑定.如果通过JQuery 直接操作 DOM 的话,势必会造成视图数据和模型数据的不匹配,这样 Vue 就失去它存在的意义了. ...