之前网上查了好多关于脏读、不可重复读、幻读的定义,各有千秋,今天听老师讲课,终于听到了权威的一版,在此记录:
前提:至少两个事物
脏读: 一个事物读了另一个事物未提交的数据(未提交的数据称为脏数据)。一个读事务一个修改事务。一条数据读了一次。
不可重复读:一个事物读了另一个事物已提交的修改或删除的数据。一个读事务,一个修改事务。一条数据读了两次。
幻读:一个事物读了另一个事物已提交的新增或删除的数据。两个修改事务。一个修改全部数据,一个新增或删除数据。
解决办法:
Mysql的innoDB对事物隔离级别的支持
RR和RC对MVCC的支持程度:
RC(read Commit)还是会出现幻读的原因:
大部分场景下,它不支持间隙锁,而RR支持间隙锁,不会出现幻读;
RR可以解决不可重复读,而RC不可以的原因:
RR读取到的数据是第一次查询之前的所有数据,RC读取到的是目前的查询之前所有数据。