MySQL SELECT查询有时会获取过时的数据

时间:2018-07-17 04:23:34

标签: mysql node.js sequelize.js

我正在使用Sequelize在我的项目中执行MySQL工作。但是我不确定这是否是Sequelize或MySQL本身的问题。 (我认为Sequelize可能只与MySQL进行交互,而对返回的结果没有任何影响?)

问题是:

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

当时没有其他操作

如所示的 pic 代码(作为一些错误情况的示例),第一个查询和第三个查询会获取陈旧的数据,应将其更新为第二个结果

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

代码:

2018-07-17 00:49:24,142 INFO 83779 [model] SELECT `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'); (30ms)
{ id: 68,
  eval_id: 5,
  user_id: 1,
  type: 2,
  created_at: 2018-07-16T15:59:44.000Z,
  updated_at: 2018-07-16T16:49:21.000Z,
  deleted_at: null }
2018-07-17 00:49:24,169 INFO 83779 [model] SELECT `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'); (24ms)
{ id: 68,
  eval_id: 5,
  user_id: 1,
  type: 1,
  created_at: 2018-07-16T15:59:44.000Z,
  updated_at: 2018-07-16T16:49:23.000Z,
  deleted_at: null }
2018-07-17 00:49:24,201 INFO 83779 [model] SELECT `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'); (29ms)
{ id: 68,
  eval_id: 5,
  user_id: 1,
  type: 2,
  created_at: 2018-07-16T15:59:44.000Z,
  updated_at: 2018-07-16T16:49:21.000Z,
  deleted_at: null }

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

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

0 个答案:

没有答案