前言
数据库是后端最核心的工具之一,分关系型数据库和非关系型数据库,关系型主流是MySQL和PgSQL,今天就以MySQL为例,讲一下数据库事务相关的知识点。
一、什么是脏读、不可重复读、幻读
在介绍事务的特性和隔离级别之前,首先来看一组非常容易混淆的概念:幻读、脏读和不可重复读。
(1)脏读
- 一个事务可以读另一个未提交的已修改事务的内容;
- 事务a,事务b,其实事务b做了修改,但是没有提交,事务a可以读到事务b这个修改,但是后面事务b回滚了修改,那么这个数据就不存在了,这就是脏读;
- 脏读只有在读未提交隔离级别下存在。
(2)不可重复读
-
一个事务只能读到其他的已提交的事务的修改内容;
-
事务a,事务b,事务b修改了,并且已经提交,此时事务a可以读到一个结果,此时事务b又修改了,并且提交,此时事务a又读到了一个不同的结果,这个就是不可重复读;
-
不可重复读在读未提交和读提交隔离级别都存在。
(3)幻读
-
一个事务提交后,才可以读到另一个提交后事务的修改,但是,如果同一个查询,其他事务添加了一个符合该查询的修改,那么每次查询的结果不同;
<