脏写
有两个事务A、B同时更新一条数据,事务A先更新为A值,事务B接着把A值更新为B值。如图: 事务A更新数据后会写入一条undo log日志,会记录事务A修改前原先的数值是NULL。 当事务A进行回滚后,把这行数据更新回了NULL,事务B一看,我更新的值是B值呀,怎么没了?这就是脏写!
脏读
事务A把这行数据修改为了A值,事务B进行查询,读到的也是A值。但是事务A突然进行回滚了,这行数据又回到了NULL值,接着,事务B读取这数据发现怎么和之前读到的A值不一样了,这就是脏读。
事务B由于事务A的回滚读不到之前的值。
不可重复读
事务A先读到这行数据为A值, 事务B修改这行数据为B值,并且提交了,不会进行回滚了, 事务A再次读取这个数据为B值,和他第一次读到的A值不一样。
不可重复读是什么? 他是指同一个事务查找同一行数据,每次查找的值不一样。
脏读是由于别的事务的回滚导致;而不可重复读读到的是已经提交的数据。
幻读
事务A进行查询,假如查到了10条数据, 事务B进行插入数据,如插入两条数据,并提交。 这是事务A再次查询,就查到了12条,发现怎么和我之前查到的不一样多。这就是幻读。
幻读指的是查询多次发现查到了之前没有的数据。
|