mysql 幻读问题- 数据库事务

抛开事务隔离级别谈幻读都是耍流氓.

      幻读是可重复读下的一种现象,是不是问题,看业务场景接不接受. 事务隔离级别越低,性能越好. 目前互联网服务端,大部分都不会开启事务. 通过分布式缓存进行并发控制. 

      但是幻读这个知识点还是很重要的, 数据库的解决方法和思路同样能用于"互联网开发". 例如版本号的概念. 创建版本号,删除版本号. 实体生命周期对应的版本号. 

     (select from ) - mvcc可以解决幻读,被称为快照读
     (select for update , update where) -- 两种实现,一种是实现避免幻读,但是要抛错,告知调用方你改的数据已经不是你开启事务时的版本,实现行级别乐观锁机制; 另一种实现是有幻读,所有匹配到数据都能够修改成功,如果业务方有需要版本判断,业务方自己去实现字段级别乐观锁机制. 目前的实现是第二种, 故被称为当前读. 这种实现下会出现幻读. 不是mvcc不能解决,而是需求和定义要求出现幻读.

     这篇文章的例子倒是不错,能很好的解释为什么mvcc解决了幻读, 注意这篇文章例子不错,但是结论错了.https://www.jianshu.com/p/cef49aeff36b

    mysql 幻读问题- 数据库事务_第1张图片

你可能感兴趣的:(mysql 幻读问题- 数据库事务)