Knex+MySQL更新,然后选择“某些时间”返回旧值

Knex+MySQL更新,然后选择“某些时间”返回旧值,mysql,knex.js,Mysql,Knex.js,以下代码有时使用Knex.js从MySQL返回旧值: 等待db.knex‘表’ .where'id','=',table_id .更新{ 最后一次开放:db.knex.fn.now, }; // ... 删除了另一个db.knex“table”…为了简洁起见,在这里更新,更新不同的字段 const updated_data=wait db.knex'table' .where'id','=',table_id 。选择“最后一次打开” 第一 //此时更新了_数据。最后一个_开口随机包含旧日期或新日

以下代码有时使用Knex.js从MySQL返回旧值:

等待db.knex‘表’ .where'id','=',table_id .更新{ 最后一次开放:db.knex.fn.now, }; // ... 删除了另一个db.knex“table”…为了简洁起见,在这里更新,更新不同的字段 const updated_data=wait db.knex'table' .where'id','=',table_id 。选择“最后一次打开” 第一 //此时更新了_数据。最后一个_开口随机包含旧日期或新日期 db.knex来自另一个模块,如下所示:

//package.json具有knex:^0.21.1, const knex_工厂=要求“knex”; exports.knex=knex_工厂{ 客户端:“mysql”, 连接:{ 主机:conf.DB_主机, 用户:conf.DB_用户, 密码:conf.DB_password, 数据库:conf.DB_NAME, } }; 这似乎只发生在生产环境中。根本无法在本地复制,也记不起我是否在登台环境中见过它

$SELECT@@TX\U隔离; 可重复读 $SELECT版本; 5.7.32-0ubuntu0.16.04.1 这个问题让我怀疑这与事务隔离级别和Knex的连接池有关,但我不太了解如何轻松地更改任何内容


有人能解释一下发生了什么吗?

我认为代码不应该/永远不会返回旧值,除非您同时多次运行该代码,例如,两个请求处理程序可能会一个接一个地更新行,然后都从数据库中读取最后一次更新

此外,如果有多个进程运行该代码,也可能导致这种行为


如果将两个查询包装为即使同时运行更新也不应发生的事务。

您好,至少感谢您的回复!我本来会删除我的问题,因为问题仍然在交易中发生。我设法在当地重现,最终确定根本问题是无关的