mysql - 具有多个查询的 mysql 事务不起作用 Amazon RDS
问题描述
我正在使用一个包来简化我的 RDS 查询Link Here,如果我使用嵌套查询有效但在使用多个查询时出错,这是我的代码
insert = await rds_client.transaction()
.query(`insert into RFP (AccountID, OtherServicesOffered, AssignedTo, Note, CreatedBy,RFPType,RenewalID) values (:AccountID, :OtherServicesOffered, :AssignedTo, :Note, :CreatedBy,:RFPType,:RenewalID)`,
{
AccountID:data.AccountID,
OtherServicesOffered:data.OtherServicesOffered,
AssignedTo:data.AssignedTo,
Note:data.Note,
CreatedBy:data.CreatedBy,
RenewalID:(data.RenewalID) ? data.RenewalID : null,
RFPType:(data.RFPType) ? data.RFPType : 0,
}
)
.query((r) => [codestringCurrentlyOffered, {RFPID: r.insertId}] )
.query((r) => [codestringToBeQuoted, {RFPID: r.insertId}] )
.commit();
}
如果我注释掉.query((r) => [codestringToBeQuoted, {RFPID: r.insertId}] )
一切似乎正常工作,这是我尝试同时运行时的错误
Cannot add or update a child row: a foreign key constraint fails (`vytaldb`.`RFPToBeQuoted2Product`, CONSTRAINT `RFPToBeQuoted2Product_ibfk_1` FOREIGN KEY
两个表上都有一个外键约束,如果我删除它开始处理两个查询,知道可能是什么问题吗?
解决方案
问题是这r
只是第二次调用中第一个INSERT
查询的结果。query()
在第三次调用中,r
包含 的结果codestringCurrentlyOffered
,而不是插入的查询RFP
,因此r.insertid
不是新RFP
行的 ID。
所以你需要在同一个r
变量的范围内执行这两个查询。
insert = await rds_client.transaction()
.query(`insert into RFP (AccountID, OtherServicesOffered, AssignedTo, Note, CreatedBy,RFPType,RenewalID) values (:AccountID, :OtherServicesOffered, :AssignedTo, :Note, :CreatedBy,:RFPType,:RenewalID)`,
{
AccountID:data.AccountID,
OtherServicesOffered:data.OtherServicesOffered,
AssignedTo:data.AssignedTo,
Note:data.Note,
CreatedBy:data.CreatedBy,
RenewalID:(data.RenewalID) ? data.RenewalID : null,
RFPType:(data.RFPType) ? data.RFPType : 0,
}
);
await insert.query(r => [codestringCurrentlyOffered, {RFPID: r.insertId}] );
await insert.query(r = [codestringToBeQuoted, {RFPID: r.insertId}]);
await insert.commit();
推荐阅读
- hadoop - Apache Pig 无法获取 MIN(列),意外符号
- javascript - 在对象中,如何添加仅包含整数的值?
- android - Kotlin MutableStateFlow.collect 正在删除值
- amazon-web-services - 对 aws eks 集群的 kubectl 身份验证
- wordpress - 在 Wordpress 搜索结果中添加每个 post_type 作为一个类
- java - 如何编写这个java程序?我知道如何在区间内编码,但只输入一个,然后 2 个素数的总和相当于输入的数字
- firebase - Firebase 存储,GB 实际下载
- python - Django 处理表单数据而无需使用 Django 创建表单
- c# - 如何使用 FileSystemWatcher 监视父目录下具有特定名称的所有文件夹?
- html - 创建 CSS 网格而不为每个单元格编写 div