事务及传播行为
来源:互联网 发布:数据资源管理平台 编辑:程序博客网 时间:2024/06/05 07:23
事务控制语言(TCL):用来维护数据一致性的语句,包括提交(COMMIT)、回滚(ROLLBACK)、保存点(SAVEPOINT)三条语句,其中COMMIT用来确认已经进行的数据库改变, ROLLBACK语句用来取消已经进行的数据库改变,当执行DML操作后(也就是上面说的增加、修改、删除等动作),可以使用COMMIT语句来确认这种改变,或者使用ROLLBACK取消这种改变。SAVEPOINT语句用来设置保存点,使当前的事务可以回退到指定的保存点,便于取消部分改变。
(1)事务的概念:事务(Transaction)是访问并可能更新数据库中数据项的程序执行单元
(2)事务的特性ACID:
原子性(Atomicity):指在事务中包含所有操作,要么都做,要么都不做;
一致性(Consistency):数据的改变保证一直;
隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力;
持久性(Durability):事务处理结束之后,对数据的修改是永久的,即便你的系统出现故障,也不会丢失;
(3)多个事务同时处理,会遇到的现象:
脏读:用户读了修改后未提交的数据;
不可重复读:读取同一条记录,但是两次数据不一样;
幻读:读取同一张表,两次记录数不一样;
(4)事务的隔离级别:
读未提交:允许幻读和不可重复读,脏读;
读提交(Oracle支持):允许幻读和不可重复读,但是不允许脏读;
重复读:允许幻读,但是不允许不可重复读和脏读;
串行化读(Oracle支持):都不允许幻读和不可重复读,脏读;
(2)事务的特性ACID:
原子性(Atomicity):指在事务中包含所有操作,要么都做,要么都不做;
一致性(Consistency):数据的改变保证一直;
隔离性(Isolation):数据库允许多个并发事务同时对其数据进行读写和修改的能力;
持久性(Durability):事务处理结束之后,对数据的修改是永久的,即便你的系统出现故障,也不会丢失;
(3)多个事务同时处理,会遇到的现象:
脏读:用户读了修改后未提交的数据;
不可重复读:读取同一条记录,但是两次数据不一样;
幻读:读取同一张表,两次记录数不一样;
(4)事务的隔离级别:
读未提交:允许幻读和不可重复读,脏读;
读提交(Oracle支持):允许幻读和不可重复读,但是不允许脏读;
重复读:允许幻读,但是不允许不可重复读和脏读;
串行化读(Oracle支持):都不允许幻读和不可重复读,脏读;
当在Service层声明事务后,Service层的方法除可以调用Dao层方法外,还可以调用其他Service方法,而这两个Service方法在事务管理上需要遵循一定的规则从而保证数据的一致性,这个规则即 事务传播行为
Spring的事务传播行为 分为以下几种:
(1)PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务
(2)PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
(3)PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常
(4)PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
(5)PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
(6)PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
(2)PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行
(3)PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常
(4)PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起
(5)PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起
(6)PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常
举例:
Service1{
void fun1(){
System.out.println("这里受事务1管理");
Service2.fun2();
}
}
Service2{
void fun2(){
System.out.println("这里受事务2管理");
}
}
当事务传播行为被声明为 PROPAGATION_REQUIRED ,执行fun1时,当事务1不存在,则新建事务,执行fun2时,当事务2不存在则用事务1,否则合并事务1、2,如果fun2内部发生异常,fun2和fun1都要执行回滚,当fun1发生异常,fun1和fun2也都要执行回滚
注意:事务回滚的前提是发生 RuntimeException ,自定义的异常需要继承 RuntimeException ,否则不会回滚
阅读全文
0 0
- 事务及传播行为
- spring 事务隔离级别及传播行为
- SPRING事务隔离级别及传播行为
- spring的事务传播行为及事务隔离级别
- 事务传播行为种类
- 事务传播行为种类
- 事务的传播行为
- 事务传播行为种类
- 嵌套事务传播行为
- 事务传播行为种类
- 事务传播行为
- 事务传播行为种类
- 事务传播行为种类
- Spring事务传播行为
- 事务传播行为
- Spring 事务传播行为
- 事务的传播行为
- 事务的传播行为
- Redis常用命令
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- LvClass 的一个效率
- out内置对象
- 转成Json格式
- 事务及传播行为
- ROS中URDF文件详解(重点讲解mesh属性)
- npm install ERR!解决方法
- Hibernate Search索引重建源码解析
- 关于JetBrains PhpStorm 汉化
- _poto_和prototype的问题续集
- Java深入学习一之部分语言规范
- 文件
- jvm小节