事务: 定义:是数据库管理系统(数据全量)执行过程当中的一个逻辑单位,由一个有限的数据库操做序列构成 目的:数据一致和数据隔离 属性:ACID, 原子性(Atomicty),一致性(Consistency),隔离性(Isolation),持久性(Durability) 隔离级别(四个级别逐渐加强),每一个级别解决一个问题: 未提交读(READ UNCOMMITTED)。另外一个事务修改了数据,但还没有提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。 提交读(READ COMMITTED)。本事务读取到的是最新的数据(其余事务提交后的)。问题是,在同一个事务里,先后两次相同的SELECT会读到不一样的结果(不重复读)。 可重复读(REPEATABLE READ)。在同一个事务里,SELECT的结果是事务开始时时间点的状态,所以,一样的SELECT操做读到的结果会是一致的。可是,会有幻读现象(稍后解释)。 串行化(SERIALIZABLE)。读操做会隐式获取共享锁,能够保证不一样事务间的互斥。 解释: 脏读:事务发生回滚,事务未提交 不可重复读:同一个事务中,另外一个事务提交了新数据,B读取A数据会致使两次读取不一致 https://segmentfault.com/a/1190000017755376 幻读:解决了不重复读,保证了同一个事务里,查询的结果都是事务开始时的状态(一致性)。可是,若是另外一个事务同时提交了新数据,本事务再更新时,就会神奇的发现了这些新数据 InnoDB默认的隔离级别是REPEATABLE READ,可重复读 传播行为:7种事务传播行为,肯定客户端和被调用端的事务边界 PROPAGATION_REQUIRED(XML文件中为REQUIRED)表示当前方法必须在一个具备事务的上下文中运行,若有客户端有事务在进行,那么被调用端将在该事务中运行,不然的话从新开启一个事务。(若是被调用端发生异常,那么调用端和被调用端事务都将回滚) PROPAGATION_SUPPORTS(XML文件中为SUPPORTS)表示当前方法没必要须要具备一个事务上下文,可是若是有一个事务的话,它也能够在这个事务中运行 PROPAGATION_MANDATORY(XML文件中为MANDATORY)表示当前方法必须在一个事务中运行,若是没有事务,将抛出异常 PROPAGATION_NESTED(XML文件中为NESTED)表示若是当前方法正有一个事务在运行中,则该方法应该运行在一个嵌套事务中,被嵌套的事务能够独立于被封装的事务中进行提交或者回滚。若是封装事务存在,而且外层事务抛出异常回滚,那么内层事务必须回滚,反之,内层事务并不影响外层事务。若是封装事务不存在,则同PROPAGATION_REQUIRED的同样 PROPAGATION_NEVER(XML文件中为NEVER)表示当方法务不该该在一个事务中运行,若是存在一个事务,则抛出异常 PROPAGATION_REQUIRES_NEW(XML文件中为REQUIRES_NEW)表示当前方法必须运行在它本身的事务中。一个新的事务将启动,并且若是有一个现有的事务在运行的话,则这个方法将在运行期被挂起,直到新的事务提交或者回滚才恢复执行。PROPAGATION_NOT_SUPPORTED(XML文件中为NOT_SUPPORTED)表示该方法不该该在一个事务中运行。若是有一个事务正在运行,他将在运行期被挂起,直到这个事务提交或者回滚才恢复执行 参考:https://juejin.im/post/5ae9639af265da0b926564e7