因此,我得到错误1452从我的节点控制台时,插入一个新的用户帐户。这是错误
{错误:er\u no\u引用的行\u 2:无法添加或更新子行:外键约束失败( myeherlpertst2
. customers
,约束 customers_ibfk_1
外键( user_id
)参考文献 users
( user_id
))
代码:'er\u no\u referenced\u row\u 2',errno:1452,sqlmessage:'无法添加或更新子行:外键约束失败( myeherlpertst2
. customers
,约束 customers_ibfk_1
外键( user_id
)参考文献 users
( user_id
))',sqlstate:'23000',索引:0,
我很确定我得到这个错误的原因是因为customers表试图引用不存在的东西,但是我不明白为什么它没有引用它。在下面的节点代码中,我首先插入user表,该表自动递增user\u id并且不为null。在插入到customers表之前,是否必须先结束第一次插入的事务,然后开始新的事务?
connection.beginTransaction(function(error){
if(error){
console.log('Error Caught');
return res;
}
if (error) {throw error;
console.log('Error Caught');
return;}
connection.query('Insert into users( user_name, user_password, user_type) values (?,?,?)', [customer.body.userName, customer.body.password, userType=1], function (error, results, fields) {
if (error) {
console.log(error);
return;
}
connection.query('Insert into customers(cust_first_name, cust_last_name, cust_email, cust_city, cust_address, cust_zip_code, cust_state, cust_phone_num, cust_role, cust_website, cust_business_name) values (?,?,?,?,?,?,?,?,?,?,?)', [customer.body.firstName, customer.body.lastName, customer.body.email, customer.body.city, customer.body.address, customer.body.zipCode, customer.body.state, customer.body.phoneNumber, customer.body.custRole=1, customer.body.website, customer.body.businessName], function (error, results, fields) {
if (error) {
console.log(error);
}
});
res.end(JSON.stringify(results));
});
console.log('End Transaction')
});
2条答案
按热度按时间myzjeezk1#
不需要另一个查询:insert的结果包含最后一个自动递增的insert id
此信息在results.insertid中提供。
所以,腐 eclipse 就像:
顺便说一句:参数usertype=1可能是一个错误
a8jjtwal2#
你需要设置
user_id
列在customers
table。mysql的最后一个\u insert \u id()函数是您需要的值的来源。下面是如何用sql实现的。请注意,insert into the customers表将last\u insert\u id()的值更改为该表中自动递增的id的值。因此,如果需要重用users表中的值,可以使用三个查询而不是两个:
我将留给您将查询放入节点程序。