事务隔离、MVCC

 参考链接:

  https://www.cnblogs.com/Mr-Dawei/p/7460909.html?utm_source=debugrun&utm_medium=referral

  https://www.cnblogs.com/xibuhaohao/p/11065350.html

 

脏读:(同时操作都没提交的读取)

  脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

  例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。

  解决办法:把数据库的事务隔离级别调整到READ_COMMITTED

不可重复读:(同时操作,事务一分别读取事务二操作时和提交后的数据,读取的记录内容不一致

  不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

  例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。

  解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ

幻读:(和可重复读类似,但是事务二的数据操作仅仅是插入和删除,不是修改数据,读取的记录数量前后不一致

  例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入(注意时插入或者删除,不是修改))了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

  解决办法:把数据库的事务隔离级别调整到SERIALIZABLE_READ

 

不可重复读和幻读的区别:

  一个是更改,一个是新增或删除。

  一个需要行级锁,一个需要表级锁。

posted @ 2019-09-19 10:22  那一剑的風情  阅读(180)  评论(0)    收藏  举报