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

iovurdzv  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(268)

因此,我得到错误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')
  });
myzjeezk

myzjeezk1#

不需要另一个查询:insert的结果包含最后一个自动递增的insert id
此信息在results.insertid中提供。
所以,腐 eclipse 就像:

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(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 (?,?,?,?,?,?,?,?,?,?,?,?)",
          [
            results.insertId,
            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));
      }
    );

顺便说一句:参数usertype=1可能是一个错误

a8jjtwal

a8jjtwal2#

你需要设置 user_id 列在 customers table。mysql的最后一个\u insert \u id()函数是您需要的值的来源。下面是如何用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(),?,?,?,?,?,?,?,?,?,?,?);

请注意,insert into the customers表将last\u insert\u 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,?,?,?,?,?,?,?,?,?,?,?);

我将留给您将查询放入节点程序。

相关问题