首页 > 解决方案 > MySQL SELECT 查询有时会获取陈旧数据

问题描述

我正在使用Sequelize在我的项目中完成 MySQL 工作。但我不确定这是 Sequelize 还是 MySQL 本身的问题。(我觉得 Sequelize 可能只做和 MySQL 的交互,不会对返回的结果有任何影响?)

问题是:

我尝试多次同步执行 3 个相同SELECT的查询。

那时没有进行其他操作

图片代码所示,作为一些错误情况的示例,第 1 次和第 3 次查询获得过时的数据,应将其更新为第 2 次结果

(图片:https ://ws1.sinaimg.cn/large/006tKfTcgy1ftcq3wxrg3j30vg0v4ali.jpg )

代码:

2018-07-17 00:49:24,142 INFO 83779 [model] 选择`id`、`eval_id`、`user_id`、`type`、`created_at`、`updated_at`、`deleted_at` FROM `eval_vote` AS`eval_vote ` WHERE ((`eval_vote`.`deleted_at` > '2018-07-16 16:49:24' OR `eval_vote`.`deleted_at` IS NULL) AND `eval_vote`.`id` = '68'); (30 毫秒)
{编号:68,
  eval_id: 5,
  用户 ID:1,
  类型:2,
  created_at: 2018-07-16T15:59:44.000Z,
  更新时间:2018-07-16T16:49:21.000Z,
  已删除_at:空 }
2018-07-17 00:49:24,169 INFO 83779 [model] 选择`id`、`eval_id`、`user_id`、`type`、`created_at`、`updated_at`、`deleted_at` FROM `eval_vote`作为`eval_vote ` WHERE ((`eval_vote`.`deleted_at` > '2018-07-16 16:49:24' OR `eval_vote`.`deleted_at` IS NULL) AND `eval_vote`.`id` = '68'); (24 毫秒)
{编号:68,
  eval_id: 5,
  用户 ID:1,
  类型:1,
  created_at: 2018-07-16T15:59:44.000Z,
  更新时间:2018-07-16T16:49:23.000Z,
  已删除_at:空 }
2018-07-17 00:49:24,201 INFO 83779 [model] 选择`id`、`eval_id`、`user_id`、`type`、`created_at`、`updated_at`、`deleted_at` FROM `eval_vote`作为`eval_vote ` WHERE ((`eval_vote`.`deleted_at` > '2018-07-16 16:49:24' OR `eval_vote`.`deleted_at` IS NULL) AND `eval_vote`.`id` = '68'); (29 毫秒)
{编号:68,
  eval_id: 5,
  用户 ID:1,
  类型:2,
  created_at: 2018-07-16T15:59:44.000Z,
  更新时间:2018-07-16T16:49:21.000Z,
  已删除_at:空 }

UPDATE对行的操作是在s 执行{id: 68, ...}之前几秒钟前完成的。SELECT我确定它执行成功了,因为每次我更新这一行时,我都会去 Navicat(一个 GUI 管理工具)刷新,看看结果是否正确。确实如此。但在我的 Sequelize 结果中

这种奇怪的事情怎么会发生?我知道 MySQL 本身有查询缓存。但是不应该在更新或插入行时清除缓存吗?

标签: mysqlnode.jssequelize.js

解决方案


推荐阅读