本文总结自《高性能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):

MySQL默认的事务隔离级别 mysql默认的事物隔离级别是_MySQL默认的事务隔离级别

Serializable(可串行化)

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