首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有趣的MySQL(三):更新丢失”问题

,就好像更新没有生效或者“丢失”了,导致没有成功将对应的主任务终止。...按照上面的执行顺序来讲,查询事务是在更新事务提交之后才开始的,理论上不应该出现查询到更新事务提交之前的数据。   分析MyBatis执行过程无果,只能将目光投向MySQL服务器的内部执行过程。...MySQL的SQL执行过程   在MySQL服务内部,一条从客户端发起的SQL请求会经过连接器、查询缓存、分析器、优化器以及最终进行实际执行的执行器。...那么就会有一定可能出现更新的事务还没有提交完成,查询的事务开始执行了,此时根据当前MySQL服务的事务隔离级别读已提交来看,这里的查询只能查询更新事务提交之前的结果集。   ...三、解决方案   根据上面的分析,最终我设计了三种解决方案: Thread.sleep :同上,既然MySQL服务更新没有执行完成,那就让该线程休息一下,让更新“飞一会”; 使用Spring事务管理 :

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MySQL 案例:“丢失数据”的谜题

    前言 最近偶尔会收到用户反馈数据不见了,数据丢失了的问题。...登录到数据库之后,发现业务库是存在的,结合用户的反馈:“业务库不见了”,初步判断是业务账号没有权限,用show grants查看之后,发现业务账号的权限只有 USAGE,类似如下效果: mysql> show...> 拓展一下 对于“丢失数据”这个现象来看,如果是“丢失”了整个库级别的数据,但是数据库本身又一切正常的话,其实有蛮大的可能性和这个案例是一样的问题:权限错误。...另外一类属于“丢失部分数据”,比如某张表不见了,或者是表的某些数据不见了等等。...严格的来说,这一类问题也有可能是权限错误引起的,因为 MySQL 的权限控制确实可以做到表和列级别,只是现实中一般不会用到。

    4K142

    MySQL视图更新

    本文主要说明视图的更新限制,如需关于视图的更多知识,参考:MySql视图原理讲解与使用大全 视图简介 视图不是表,不能直接存储数据,是一张虚拟的表,视图和数据库的表存在着对应的关系,我们在某些情况下是可以通过视图来操作数据库的表...一般情况下,在创建有条件限制的视图时,加上 "WITH CHECK OPTION"命令 视图的更新问题 某些视图是可更新的。...仅引用文字值(在该情况下,没有要更新的基本表)。 ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。 注意: 视图中虽然可以更新数据,但是有很多的限制。...一般情况下,最好将视图作为查询数据的虚拟表,而不要通过视图更新数据。因为,使用视图更新数据时,如果没有全面考虑在视图中更新数据的限制,就可能会造成数据更新失败。...option都一样 对于insert,有with check option,要保证insert后,数据要被视图查询出来 对于没有where 子句的视图,使用with check option是多余的 本文参考:MySql

    3.2K30

    MySQL是如何保证数据不丢失的?

    但是,MySQL作为一个存储数据的产品,怎么确保数据的持久性和不丢失才是最重要的,感兴趣的可以跟随本文一探究竟。...这个时候就涉及到一个问题:如果MySQL服务宕机了,这些在内存中更新的数据会不会丢失?答案是一定会存在丢失现象的,只不过MySQL做到了尽量不让数据丢失。接下来来看一下MySQL是怎么做的。...MySQL在这里的处理方案是:等待合适的时机将批量的「脏页」异步刷新到磁盘。先快速将更新的记录以日志的形式刷新到磁盘。先看第一点,什么时候是合适的时机?...总结InnoDB通过以上的操作可以尽可能的保证MySQL丢失数据,最后再总结一下MySQL是如何保障数据不丢失的:为了避免频繁与磁盘交互,每次DML操作先在「Buffer Pool」中的缓存页中执行,...如果在「脏页」刷新到磁盘之前,MySQL宕机了,那么会在下次启动时通过 redo log 将脏页构建出来,做到数据恢复。通过以上步骤,MySQL做到了尽可能的不丢失数据。

    99652
    领券