序言
脏读、不可重复读、幻读这几个概念开始接触和学习的时候是在大学学习数据库系统的时候,那时候对这几个专业名词的理解停留在概念文字上,并没有真正使用过实践中,最近工作中涉及到这几个概念方面的知识,就来整理一下。
这几个名词涉及到的内容有事务、事务的隔离级别等
1. 脏读
脏读就是指当一个事务A正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务B也访问这个数据,然后使用了这个数据,这就是脏读。
例子:
1.库存的原有资产数量为1000, 仓库管理人员将库存数量改为了8000(但未提交事务)
2.盘点员盘点仓库资产数量 ,发现变为了8000,欢天喜地!
3.而仓库管理员发现操作有误,回滚了事务, 资产数量又变为资产数量了1000 像这样, 盘点员记取的资产数量8000是一个脏数据。
2. 不可重复读
不可重复读指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。
例子:
1.在事务1中,盘点员 读取了资产数量为1000,操作并没有完成
2.在事务2中,这时仓库管理员修改了资产数量为2000,并提交了事务.
3.在事务1中,盘点员 再次读取资产数量时,资产数量变为了2000
解决办法:如果只有在修改事务完全提交之后才可以读取数据,则