🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
数据库事务的隔离级别有4个,由低到高依次为Read uncommitted (读未提交)、Read committed(读提交)、Repeatable read(可重复读) 、Serializable(序列化) ,这四个级别可以逐个解决脏读 、不可重复读 、幻读 (如果不知道脏读,不可重复读,幻读,可以先看一下文章默认的解释)这几类问题。 | | 脏读 | 不可重复读 | 幻读 | | --- | --- | --- | --- | | Read uncommitted | √ | √ | √ | | Read committed | × | √ | √ | | Repeatable read| × | × | √ | | Serializable | × | × | × | 注意:我们讨论隔离级别的场景,主要是在多个事务并发 的情况下,因此,接下来的讲解都围绕事务并发。 问:什么事脏读、不可重复读、幻读呢? 脏读(Dirty Read) 脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚 不可重复读(Unrepeatable Read) 不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。 例如:事务B中对某个查询执行两次,当第一次执行完时,事务A对其数据进行了修改。事务B中再次查询时,数据发生了改变 幻读(phantom read) 幻读,是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.