mybatis事务
Connection setAutoCommit() 执行查询没有影响 执行增删改时
SqlSessionFactory openSession(boolean autoCommit) 默认值就是false 开启事务
SqlSession对象 commit(),如果在mybatis使用中向关闭事务,需设置autoCommit为true
什么是事务?
事务是由单独单元的一个或者多个sql语句组成的,在这个单元中,每个sql语句都是相互依赖的,而整个单独单元是一个不可分割的整体。如果单元中某条sql语句执行异常,那么整个这个单元则将会回滚。
事务的四大特性ACID
- 原子性:一个事务是不可分割的一个整体,在这个整体中要么全部执行,要么全部不执行。Atomicity
- 一致性:一个事务的执行会使数据从一个一致状态切换到另外一个一致状态。Consistency
- 隔离性:一个事务的执行不受其他事务的干扰 Isolation
- 持久性:一个事务一旦提交,则会永久的改变数据库的数据,数据不可逆 Durability
由事务的隔离性会引发的问题:
- 脏读
脏读是指一个事务处理过程中读取到了另外一个事务尚未提交的事务中的数据。
- 不可重复读
不可重复读是指对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是在查询的时间间隔内,被另外一个事务修改并提交了。
- 虚读(幻读)