gpt4 book ai didi

mysql - 错误 1452 MySQL 和 NodeJS。为什么数据库不能正确引用我的表?

转载 作者:行者123 更新时间:2023-11-29 05:54:09 25 4
gpt4 key购买 nike

所以我在插入新用户帐户时从我的 Node 控制台收到错误 1452。这是错误

{ Error: ER_NO_REFERENCED_ROW_2: Cannot add or update a child row: a foreign key constraint fails (myeherlpertst2.customers, CONSTRAINT customers_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (user_id))

code: 'ER_NO_REFERENCED_ROW_2', errno: 1452, sqlMessage: 'Cannot add or update a child row: a foreign key constraint fails (myeherlpertst2.customers, CONSTRAINT customers_ibfk_1 FOREIGN KEY (user_id) REFERENCES users (user_id))', sqlState: '23000', index: 0,

我非常确定我收到此错误的原因是客户表试图引用不存在的内容,但我不明白为什么它不引用它。在我下面的 Node 代码中,我首先插入用户表,它会自动递增 user_id 并且不为空。在插入客户表之前,我是否必须结束第一个插入的事务,然后开始一个新的事务?

    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')
});

最佳答案

您需要在customers 表中正确设置user_id 列。 MySQL's LAST_INSERT_ID() function是您需要的值(value)的来源。以下是在 SQL 中执行此操作的方法。

Insert into users( user_name, user_password, user_type) values (?,?,?);

Insert into customers(user_id, 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 (LAST_INSERT_ID(),?,?,?,?,?,?,?,?,?,?,?);

请注意,插入客户表会将 LAST_INSERT_ID() 的值更改为该表中自动递增 ID 的值。因此,如果您需要重用 users 表中的值,请执行此操作,使用三个查询而不是两个:

Insert into users( user_name, user_password, user_type) values (?,?,?);

SET @userid := LAST_INSERT_ID();

Insert into customers(user_id, 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 (@userid,?,?,?,?,?,?,?,?,?,?,?);

我会留给您将查询放入您的 Node 程序。

关于mysql - 错误 1452 MySQL 和 NodeJS。为什么数据库不能正确引用我的表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51293710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com