mysql的数据隔离级别_mysql数据隔离级别

数据库隔离级别种类

安全级别依次升高,读写性能依次降低。

Read uncommitted (读未提交)

Read committed (读已提交)

Repeatable read (可重复读)

Serializable (可串行化)

重要概念

脏读

不可重复读

幻读

脏读

读到别的事务没有提交的数据。

A事务,会读取到B事务还未提交的数据。因为B事务可能会因为各种原因数据回滚,所以如果A事务读取了B未提交的数据,然后基于此进行一些业务操作,但是B事务发生错误回滚了,那A事务的业务操作就错了。

不可重复读

不可重复度是指读的时候 别的事务修改了数据(update)。

在同一个事务生命周期内,也就是这个事务还未提交之前。如果另外一个事务,对数据进行了编辑(update)或者删除(delete)操作。那么A事务就会读取到。简单理解,就是在一个事务生命周期内,多次查询数据,每次都可能查出来的不一样。

幻读

幻读是指读的时候,别的事务插入或者删除了数据(insert or delete)。

幻读的结果其实和不可重复读是一样的表现,差异就在于,不可重复读,主要是针对其他事务进行了编辑(update)和删除(delete)操作。而幻读主要是针对插入(insert)操作。也就是在一个事务生命周期内,会查询到另外一个事务新插入的数据。

Read uncommitted (读未提交)

SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;

805163fc4e58

读未提交-脏读

实际上,读未提交无法避免 脏读、不可重复读、幻读,导致数据一致性很难保证。因此,实际生产环境中,用的不太多。但是如果对性能要求比较高,数据安全性要求不太高的场景可以使用。

Read committed (读已提交)

Oracle等多数数据库默认都是该级别。

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

805163fc4e58

读已提交-不可重复读

上图根据 a=1 一顿操作之后,第二次获取a发现,已经被置成2了,那么就是说,事务不是独立,数据的一致性还是有比较大的隐患。

读已提交,可能会在同一个事务中,出现读同一个数据前后不一致的情况。

读已提交没办法避免 不可重复读、幻读。

Repeatable read (可重复读)

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;

mysql-InnoDB默认级别,重要的内容加粗加斜!

可以避免脏读和不可重复读,但是无法避免幻读。

805163fc4e58

可重复读-幻读

Serializable (可串行化)

Serializable完全串行化的读,每次读都需要获得表级共享锁,读写相互会相互互斥,这样可以更好的解决数据一致性的问题,但是同样会大大的降低数据库的实际吞吐性能。所以该隔离级别因为损耗太大,一般很少在开发中使用。

最后安利一个图

805163fc4e58

福利图

会有不定期更新,转载请说明来源,以便纠错或者拓展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值