mysql事务特性-隔离级别

事务特性:ACID

  1. Atomicity:原子性,要么全部成功要么全部失败
  2. Consistency:一致性,操作的数据及状态改变是一致的
  3. Isolation:隔离性,提交事物前数据对其他事物不可见
  4. Durability:持久性,事物对数据的修改永久保存

事务隔离级别:

基础设置

查看Mysql数据库隔离级别:
show global variables like '%isolation%';

Mysql全局隔离级别:
未提交读:
SET global TRANSACTION ISOLATION LEVEL read uncommitted;
提交读:
SET global TRANSACTION ISOLATION LEVEL read committed;
可重复读:
SET global TRANSACTION ISOLATION LEVEL repeatable read;
串行化:
SET global TRANSACTION ISOLATION LEVEL serializable;

read uncommitted:未提交读

read uncommitted:未提交读,事物未提交对其他事务数据可见 【脏读】

read committed:提交读

read committed:提交读,A事务执行更新;B事务查询;A事务又执行更新;
B事务再次查询时,前后两次数据不一致 【不可重复读】

repeatable read:可重复读

read committed:可重复读,在一个事务中多次读取同样的数据结果是一样的,即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。 【幻读问题】

serializable:串行化

serializable:串行化,最高隔离级别,强制事物解决所有问题,写的时候不能读 【性能低】

Spring事物隔离级别

枚举:Isolation
DEFAULT(-1),
READ_UNCOMMITTED(1),
READ_COMMITTED(2),
REPEATABLE_READ(4),
SERIALIZABLE(8);
基本上和数据库隔离级别一一对应,
DEFAULT :这是默认值,表示使用底层数据库的隔离级别。

Spring事物传播属性

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
枚举:Propagation
REQUIRED(0),
如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 
SUPPORTS(1),
如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 
MANDATORY(2),
如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 
REQUIRES_NEW(3),
创建一个新的事务,如果当前存在事务,则把当前事务挂起。 
NOT_SUPPORTED(4),
以非事务方式运行,如果当前存在事务,则把当前事务挂起。 
NEVER(5),
以非事务方式运行,如果当前存在事务,则抛出异常。 
NESTED(6);
如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。 

参考文献

https://blog.csdn.net/wyhhahaha/article/details/103370547
https://www.cnblogs.com/zhuyeshen/p/11491617.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注