网站开发建设方案书,做第三方库个人网站,电子商务网站规划建设与管理,网页升级访问更新狼1.什么是事务#xff1a;
事务是指程序中的一个操作序列。其特点是#xff1a;该序列的所有操作要么全部成功完成#xff0c;要么只要有一个操作失败#xff0c;则该序列所有操作都将被撤销。这也是事务的原子性#xff08;要么成功#xff0c;要么失败#xff09;。
…1.什么是事务
事务是指程序中的一个操作序列。其特点是该序列的所有操作要么全部成功完成要么只要有一个操作失败则该序列所有操作都将被撤销。这也是事务的原子性要么成功要么失败。
2.事务特性
事务特性分为四个原子性Atomicity、一致性Consistency、隔离性Isolation、持续性Durability简称ACID。
原子性Atomicity:事务是数据库逻辑工作单元事务中包含的操作要么都执行成功要么都执行失败。一致性Consistency事务执行的结果必须是使数据库数据从一个一致性状态变到另外一种一致性状态。当事务执行成功后就说数据库处于一致性状态。当多个事务都执行完毕后满足第一条的原子性若最终的数据结果跟事务执行所期望的结果不一致时称该状态为数据库的不一致状态。隔离性Isolation一个事务的执行过程中不能影响到其他事务的执行即一个事务内部的操作及使用的数据对其他事务是隔离的并发执行各个事务之间无不干扰。持续性Durability即一个事务执一旦提交它对数据库数据的改变是永久性的。之后的其它操作不应该对其执行结果有任何影响。
3.事务的隔离级别
事务的隔离级别也分为四种由低到高依次分别为read uncommited读未提交、read commited读提交、read repeatable读重复、serializable序列化这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 read uncommited是最低的事务隔离级别它允许另外一个事务可以看到这个事务未提交的数据。read commited保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。repeatable read这种事务隔离级别可以防止脏读不可重复读。但是可能会出现幻象读。它除了保证一个事务不能被另外一个事务读取未提交的数据之外还避免了以下情况产生不可重复读。serializable这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读不可重复读之外还避免了幻象读。脏读、不可重复读、幻象读概念说明脏读指当一个事务正字访问数据并且对数据进行了修改而这种数据还没有提交到数据库中这时另外一个事务也访问这个数据然后使用了这个数据。因为这个数据还没有提交那么另外一个事务读取到的这个数据我们称之为脏数据。依据脏数据所做的操作肯能是不正确的。不可重复读指在一个事务内多次读同一数据得到的是不同的值。在这个事务还没有执行结束另外一个事务也访问该同一数据那么在第一个事务中的两次读取数据之间由于第二个事务的修改第一个事务两次读到的数据可能是不一样的这样就发生了在一个事物内两次连续读到的数据是不一样的这种情况被称为是不可重复读。幻象读一个事务先后读取一个范围的记录但两次读取的纪录数不同我们称之为幻象读两次执行同一条 select 语句会出现不同的结果第二次读会增加一数据行并没有说这两次执行是在同一个事务中
spring事务传播特性
事务传播行为就是多个事务方法相互调用时事务如何在这些方法间传播。spring支持7种事务传播行为 propagation_requierd如果当前没有事务就新建一个事务如果已存在一个事务中加入到这个事务中这是最常见的选择。propagation_supports支持当前事务如果没有当前事务就以非事务方法执行。propagation_mandatory使用当前事务如果没有当前事务就抛出异常。propagation_required_new新建事务如果当前存在事务把当前事务挂起。propagation_not_supported以非事务方式执行操作如果当前存在事务就把当前事务挂起。propagation_never以非事务方式执行操作如果当前事务存在则抛出异常。propagation_nested如果当前存在事务则在嵌套事务内执行。如果当前没有事务则执行与propagation_required类似的操作
Spring 默认的事务传播行为是 PROPAGATION_REQUIRED它适合于绝大多数的情况。假设 ServiveX#methodX() 都工作在事务环境下即都被 Spring 事务增强了假设程序中存在如下的调用链Service1#method1()-Service2#method2()-Service3#method3()那么这 3 个服务类的 3 个方法通过 Spring 的事务传播机制都工作在同一个事务中。