我正在使用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本身具有查询缓存。但是,是否不应在每次更新或插入行时清除缓存?