什么是事务
在了解脏读 不可重复读 幻读之前,有必要先理解事务(transaction)的定义及其目的。
- 定义
数据库事务(简称:事务)是[数据库管理系统]中的一个逻辑单位,由一个有限的[数据库]操作序列构成。
- 目的
- 为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。
- 当多个[应用程序]在[并发]访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。
什么是脏读 不可重复读 幻读
- 脏读
脏读又称无效数据的读出,是指在数据库访问中,[事务]T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。
- 不可重复读
不可重复读,是指在数据库访问中,一个[事务]范围内两个相同的查询却返回了不同数据。
这是由于查询时系统中其他事务修改的提交而引起的。比如事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。
- 幻读
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。
可见造成脏读 不可重复读 幻读的原因都是在事务在commit提交前有其它事务对同样的数据进行了操作 干扰了事务读取的结果。
以上文字可能解析得些许抽象,可以看下图
1.png