1 什么是事务

事务就是把多个事件,看作一个事件来处理

2 为什么要有事务

为了数据的安全,以数据库JDBC为例,A转钱给B,如果没有数据库的事务,A转给B时发生了错误,b没有接受到钱,但是A的数据操作正确,就会导致A用户的钱没有了,B用户的钱没有增加。如果有事务,就会把钱返回给A

3事务的原则

必须遵循ISO/IEC所制定的ACID原则

原子性(atomicity):事务要么全部执行,要么全部不执行。失败时,进行事务回滚

一致性(consistency):表示事务执行失败时,所有被该事务影响的数据都回到原来的状态;事务从一种正确的状态,转换到另一种正确的状态

隔离性(isolation):事务在执行过程对数据的修改,在事务提交之前对其他事务都是不可见的

持久性(durability):一个事务一旦提交,事务的操作将永久保存在DB中。即使此时执行回滚操作也不能撤消所做的更改。

3事务的类型

有三种:JDBC事务   JTA(Java Transaction Api)事务 容器事务

4三种事务的差异

JDBC事务:控制在一个数据库中,但是操作简单

JTA事务:功能强大,事务可以跨越多个数据库或DAO,使用也比较复杂

容器事务:主要是指J2EE应用服务器提供的事务管理,局限于EJB应用使用

5事务并发可能引起的问题

脏读:一个事务读取了另一个事务尚未提交的数据

不可重复读:一个事务的操作导致另一个事务前后读取到不同的事务

幻读:一个事务的操作导致另一个事务前后再次查询的结果数据量不同

6JDBC事务支持体现在三个方面

1自动提交模式(Auto-commit code)(默认为true)

a,如果为true,每个独立的SQL操作的执行完毕,事务即立即提交,也就是説每个SQL都一个事务

1.JDBC规范是这样规定的:对数据操作语言(DML,如insert,update,delete)和数据定义语言(如create,drop),语句一执行完就视为执行完毕。

2.对select语句,当与它关联的ResultSet对象关闭时,视为执行完毕。

3.对存储过程或其他返回多个结果的语句,当与它关联的所有ResultSet对象全部关闭,所有update count(update,delete等语句操作影响的行数)和output parameter(存储过程的输出参数)都已经获取之后,视为执行完毕

b,如果为false,每个事务都必须显示调用commit进行提交,或者用rollback进行回滚

2事务隔离级别

五种事务隔离级别

3保存点:设置为保存点,事务回滚可以到保存点,而不是整个事务

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐