ANSI/ISO SQL92 标准定义了四种隔离级别,分别是 Read uncommitted、Serializable、Repeatable read、Read committed
在同样的运行环境下,不同隔离级别的性能从高到低的顺序是 Read uncommitted > Read committed > Repeatable read > Serializable
Oracle 数据库采用的默认隔离级别和MySQL 实现的 READ COMMITTED 相似,这个隔离级别下不会出现脏读(Dirty Read)和不可重复读(Non-Repeatable Reads),但会有幻读(Phantom Reads)
Serializable 隔离级别能够完全防止脏读(Dirty Read)、不可重复读(Non-Repeatable Reads)和幻读(Phantom Reads)
在MySQL中 InnoDB 存储引擎实现了四个隔离级别(其他存储引擎不支持事务),用以控制事务所做的修改,并将修改通告至其它并发的事务,现在一般有4个,一般用第一级别:
第一级别:读未提交(read uncommitted),即对方事务没有提交,但是已经读到数据,会造成读脏数据。
第二级别:读已提交(read commintted),即对方事务已经提交,我方可以读到数据,可以解决读脏数据,但是会造成不可重复读数据。
第三级别:可重复读(repeatable read),可以解决不能重复读数据,但是可能会造成幻读
第四级别:序列化读/串行化读(serializable),可以解决所有问题,但是效率低
mysql默认的隔离级别为 可重复读。oracle默认的隔离级别是读已提交
隔离级别 | 脏读(Dirty Read) | 不可重复读(Non-repeatable Read) | 幻读(Phantom Read) |
---|---|---|---|
读未提交(read uncommitted) | Yes | Yes | Yes |
读已提交(read commintted) | NO | Yes | Yes |
可重复读(repeatable read) | NO | NO | Yes |
序列化读/串行化读(serializable) | NO | NO | NO |