读未提交( read uncommitt ):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
读已提交( read committed ):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
可重复读(repeatable read):InnoDB 默认级别,对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,有可能产生幻读。
可串行化(serializable):最高的隔离级别,它要求所有的 SQL 按照顺序执行。这样就克服了脏读、幻读、不可重复读。它的效率最低,但也是最安全的。
不同的隔离级别是为了解决 脏读、幻读、不可重复读
脏读 | 不可重复读 | 幻读 | |
---|---|---|---|
读未提交 | ✅ | ✅ | ✅ |
读已提交 | ❌ | ✅ | ✅ |
可重复读 | ❌ | ❌ | ✅ |
可串行化 | ❌ | ❌ | ❌ |