初探事务

1.事务是什么

事务是并发控制的单位,是用户定义的一个操作序列,这些操要么都做,要么都不做,是一个不可分割的工作单位.

2.事务的特性

①原子性:表示事务内不可分割,要么都成功,要么都失败
②一致性: 表示事务做完后,要求满足数据库的一些完整性约束.也就是事务要么都成功,要么都失败,失败了,要对前面的操作进行回滚.
③隔离性:表示一个事务开启了,不能受其它事务的影响
④持久性:表示事务开始了,就不能中止,在事务提交后,要将数据序列化到数据库

3.事务的隔离级别

①read uncommitted:读未提交,就是一个事务可以读取另一个未提交事务的数据.
②read committed:读已提交,就是一个事务所做的修改在未提交之前,其它事务是无法读到所修改的数据的,oracle默认的隔离级别是read committed
③repeatable read:可重复读,同一个事务多次查询的结构结果是一致的,mysql默认的隔离级别就是repeatable read
④serialzable:可串行化,就是多个线程(事务)完全不并发,串行执行,当然不会有任何隔离问题,显而易见效率也最低,一般不采用.

4.事务不考虑隔离级别产生三个读问题及解决方案

隔离级别
脏读
不可重复读
虚读
读未提交
读已提交
可重复读
可串行化
5.事务的传播特性 ———
传播行为 意义
PROPAGATION_MANDATORY 表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常
PROPAGATION_NESTED 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像PROPAGATION_REQUIRES一样。
PROPAGATION_NEVER 表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。
PROPAGATION_NOT_SUPPORTED 表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。
PROPAGATION_SUPPORTS 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。
PROPAGATION_REQUIRES_NEW 表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。
PROPAGATION_REQUIRES 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。

6.SOA中如何保证事务一致性

①两阶段提交

②事务的补偿机制: 补偿事务是一种在业务端实施业务逆向操作事务,来保证业务数据一致性的方式

③阿里的GTS

详情请看:
两阶段
补偿
GTS

猜你喜欢

转载自blog.csdn.net/bushanyantanzhe/article/details/79600261