多查询的mysql事务不工作
我正在使用一个包来简化我的RDS查询,如果我在嵌套查询上使用它,但在使用多个查询时出错,这是我的代码多查询的mysql事务不工作,mysql,node.js,Mysql,Node.js,我正在使用一个包来简化我的RDS查询,如果我在嵌套查询上使用它,但在使用多个查询时出错,这是我的代码 insert = await rds_client.transaction() .query(`insert into RFP (AccountID, OtherServicesOffered, AssignedTo, Note, CreatedBy,RFPType,RenewalID) values (:AccountID, :OtherServicesOffered, :As
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)=>[CodeStringToBequected,{RFPID:r.insertId}])
一切似乎都正常工作,这是我试图同时运行两者时的错误
Cannot add or update a child row: a foreign key constraint fails (`vytaldb`.`RFPToBeQuoted2Product`, CONSTRAINT `RFPToBeQuoted2Product_ibfk_1` FOREIGN KEY
两个表上都有一个外键冲突,如果我去掉它开始处理两个查询,你知道可能会出现什么问题吗?问题是
r
只是第二个query()
调用中第一个INSERT
查询的结果。在第三次调用中,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();
有什么错误?@Barmar Post已更新!这似乎是一个可能的解决方案,但不幸的是得到了同样的错误,所以在上面的解决方案中,我认为r问题仍然存在