阐述并发操作所能够带来的不一致性有哪些?再举一个具体的例子。
丢失修改:两人同时读取一个数据后,同时进行了提交,导致其中一人的提交数据被覆盖
不可重复读:一人读取某数据后,被其他人读取后然后修改写回,等到再来读的时候发现数据发生了变化。
读脏数据:某人读取数据后进行了修改然后写回,过了一会他发现自己写回的数据存在问题进行了撤回,但是在其期间,这个不正确的数据已经被其他人所读取并使用。
PS:有时候我们允许一些数据上的不一致性。比如在统计工作中,有可能数据量非常大,偶尔的不一致性不会对结论造成影响。
幻影(phantom row)
指不可重复读的一种具体现象。
具体来说,当一个人就某条件进行了查询后,其他人进行了插入或者删除的操作,导致再次执行同样的查询会莫名其妙多出一些数据或消失一些数据,这就叫幻影现象。
并发控制的技术有哪些?
锁;时间戳;乐观控制法;版本控制
锁有哪几种?怎么使用?
锁分为读锁和写锁。
写锁,又叫Xlock、排他锁。要求在写数据之前,先对数据上Xlock,然后在事务执行的期间,不能在被上其他的锁(S或X)
读锁,又叫Slock、共享锁。要求在读谁之前,对数据上Slock,在事务执行期间,其他事务只能继续上Slock实现同时读取,但是不可以上Xlock
封锁协议是什么,为了什么,有哪几种?
封锁协议是事务在对数据进行读写上锁时,所共同遵守的规定。主要是规定什么时候加锁/解锁。
目的是为了实现不同程度的并发控制。
具体来说,封锁协议一级/二级/三级封锁协议。其中, 一级封锁协议要求“写之前必须上X锁,事务结束才能释放”,解决了丢失修改的问题 二级封锁协议在一级的要求之上加上“读之前必须上S锁,读完就可以释放”的规定,解决了读脏数据的问题 三级封锁协议在一级的要求之上加上“读之前必须上S锁,整个事务结束才可以释放”的规定,同时解决了丢失修改、不可重复读、读脏数据的问题。