mysql四种隔离级别详解

1.现在来看看MySQL数据库为我们提供的四种隔离级别
 mysql四种隔离级别详解_第1张图片
 mysql四种隔离级别详解_第2张图片
 解释: read-commited是通过“锁行”来防止其他事务干扰的
mysql四种隔离级别详解_第3张图片
解释: ①repeatable-read是如何解决脏读问题的呢?
答: 该级别保证了每行记录的结果是一致性,也就是说每一行记录都是有一个事务所单独处理的,所以是以“行”为处理单元,这样的话不会产生所谓的“多个事务共同操作同一行数据而产生的脏读问题了”
在这里插入图片描述
  
  总结:在MySQL数据库中,支持上面四种隔离级别,默认的为Repeatable read (可重复读);而在Oracle数据库中,只支持Serializable (串行化)级别和Read committed (读已提交)这两种级别,其中默认的为Read committed级别。

2.事务并发产生的问题:脏读、幻读、不可重复读。
脏读(Dirty Read):A 事务读取 B 事务尚未提交的数据并在此基础上操作,而 B 事务执行回滚,那么 A 读取到的数据就是脏数据。
不可重复读:事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。

也就是说,当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义。

幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。
也就是说,当前事务读第一次取到的数据比后来读取到数据条目少。

解释:不可重复读和幻读的区别是,不可重复读是指在一个事务里面两次读取相同的数据,而两次读取的结果不一样。而幻读是同样的一个事务执行两次,得到的结果却不一样。

你可能感兴趣的:(数据库系列,mysql知识总结)