mysql 默认事务隔离级别_MySQL(一):事务隔离级别

本文总结自《高性能MySQL》一书隔离由于读写

事务隔离级别

SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务所做的修改,哪些在事务和事务之间是可见的,哪些是不可见的,低级别的隔离级别由于读写权限高,可是执行更高的并发,同时系统的开销较低

隔离级别分类

Read Uncommitted(未提交读)

在该级别中,事务中的修改,即使没有提交,其他事务也是可见的,因此事务可以读取未提交的数据(称为脏读 Dirty Read),这违反了隔离性原则(一个事务所做的修改在最终提交以前,通常对其他事物是不可见的),造成数据,业务逻辑等等错误。

tip:Read Uncommited从性能上来说并不会比其他级别好太多,同时也较其他级别少了很多好处,通常不建议使用

Read Commited(读提交)

大多数数据系统默认的隔离级别是Read Commited(MySQL不是),Read Commited满足隔离性的定义:一个事务开始时,只能看见已经提交的事务所做的修改,也就是说一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的;有时候该级别也可称为:Nonrepeatable Read(不可重复读):因为执行两次同样的查询,所得到的前后结果可能是不一致的,期间可能夹杂着其它事务对该数据的修改;

Repeatable Read(可重复读)

该隔离级别为MySQL的默认事务隔离级别;

该级别解决了脏读的问题,保证了在同一个事务中,多次读取同样记录所得到的结果是一致的。但同时没有另外一个问题:Phantom Read(幻读):指在某个事务在读取某个范围内的记录时,另一事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row):

a2275cb7a6620843faf4afafea8ad3d7.png

Serializable(可串行化)

是最高的隔离级别,通过强制事务串行执行,避免幻读问题,会在读取的每一行数据上都加锁,因此会出现大量的线程超时和锁竞争问题,常用于有高度的确保数据一致性要求和接受没有并发的情况;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值