mysql事务传播级别_MySQL--事务隔离级别及传播机制

TRANSACTION(事务隔离级别)

在说明事务隔离级别之前先说一下脏读、不可重复读、幻读这三个概念。

脏读:一个事务读取到另一事务未提交的更新新据。当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据, 那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作也可能是不正确的。

不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。相反,“可重复读”在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。

幻读:事务T1执行一次查询,然后事务T2新插入一行记录,这行记录恰好可以满足T1所使用的查询的条件。然后T1又使用相同的查询再次对表进行检索,但是此时却看到了事务T2刚才插入的新行。这个新行就称为“幻像”,因为对T1来说这一行就像突然出现的一样。

1. ISOLATION_DEFAULT:这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。每种数据库的默认隔离级别是不同的,例如SQL Server、Oracle默认Read Commited,MySQL默认Repeatable Read。

另外四个与JDBC的隔离级别相对应,不同的隔离级别采用不同的锁类型来实现,在四种隔离级别中,Serializable的隔离级别最高,Read Uncommited的隔离级别最低。

2. ISOLATION_READ_UNCOMMITTED(读取未提交):读未提交数据,这是事务最低的隔离级别,在并发的事务中,它充许一个事务可以读到另一个事务未提交的更新数据。(会出现脏读,不可重复读和幻读)

3. ISOLATION_READ_COMMITTED(读已提交):读已提交数据,保证在并发的事务中,一个事务修改的数据提交后才能被另外一个事务读取到。(会出现不可重复读和幻读)

4. ISOLATION_REPEATABLE_READ(可重复读):可重复读,这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻读。一般是采用“快照”的方式来实现的。

5. ISOLATION_SERIALIZABLE(可串行化):事务被处理为顺序执行。这是花费最高,但也是最可靠的事务隔离级别。能有效的避免脏读、不可重复读、幻读。

数据库事务的4个特性:

原子性(Atomic):组成一个事务的多个数据库操作是一个不可分割的原子单元;只有所有操作执行成功,整个事务才提交,

其中一个操作失败,都必须回滚到初始状态。

一致性(Consistency):事务操作成功后数据库所处的状态和它的业务规则是一致的;(即数据总额不会被破坏。

如A账户转账100到B账户,无论操作成功与否,A和B的存款总额是不变的)

隔离性(Isolation):在并发数据操作时,不同的事务拥有各自的数据空间,它们的操作不会对彼此产生干扰。(并非是完全无干扰,

根据数据库的隔离级别,会产生不同程度的干扰)

持久性(Durability):一旦事务提交成功,事务中的数据操作都必须持久化到数据库中;就算数据库崩溃,也必须保证有某种机制恢复。

在这些特性中,数据“一致性”是最终目标,其他的特性都是为了达到这个目标的措施和手段。

MYSQL查看当前事务隔离级别

select @@tx_isolation,@@global.tx_isolation;

20ddd2770756ddc7af38b11e17a6a12b.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值