mysql - 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 本身有查询缓存。但是不应该在更新或插入行时清除缓存吗?
解决方案
推荐阅读
- javascript - 使用其他下拉列表选项禁用下拉列表选项
- sql - 用于检查给定数据集是否可用的 T-SQL 查询不可用
- ssms-2014 - 获得 Top 10 产品的结果
- hive - 在配置单元中更新数组数据类型时获取空值
- angular - Protractor 中的奇怪故障问题:Jasmine 测试用例?
- yocto - 如何检测bitbake中本地文件的变化?
- c++ - API 返回智能指针的 std::optional 以明确指定指针可能为空是否有意义?
- amazon-web-services - 用于限制 EC2 实例上的读取访问的 AWS IAM 策略
- ruby-on-rails - 查询连接表rails活动记录
- python - 在 Python 中使用 **kwargs 的正确方法