事务的传播性和隔离级别
事务的传播性:
1、PROPOGATION_REQUIRES --需要在一个事务中执行
2、PROPOGATION_SUPPOTS --不需要在一个事务中执行,如果有事务,也可以执行
3 PROPOGATION_NOT_SUPPORTED --不支持在一个事务中执行,如果在一个正在运行的事务中执行,则会被挂起
5 PROPOGATION_NEVER --必须不在一个正在运行的事务中执行,则会抛出异常
6 PROPOGATION_MANDATORY --必须在一个正在运行的事务中执行,否则抛出异常
7 PROPOGATION_NEW --如果有一个事务正在执行,则挂起该事务,重开一个事务
4 PROPOGATION_NESTED --如果有一个事务a正在进行中,该事务被嵌套在a中
事务的隔离级别:
1、ISOLATION_DEFAULT 默认,3 ,也就是可重复读
2、ISOLATION_READ_UNCOMMITED ,读未提交,会引起不可重复读、脏读、幻读
3、ISOLATION_READ_COMMITED,读已提交,避免脏读,但仍然会有不可重复读、幻读
4、ISOLATION_READ_REPEATED,可重复读,避免脏读、不可重复读,仍然有幻读
5、ISOLATION_SEARILIZE ,序列化
脏读:读取了未提交的数据a,然后a在事务中回滚了
不可重复读:读取一个数据,前后不一致,这个是因为其他事务修改了该数据
幻读:用一条sql,查询数据,第二次查询到的数据的数量和第一次查询到的数量不同
mysql 的默认的隔离级别是:可重复读
oracle、sqlserver 的默认隔离级别是:读已提交