立即抓取mySql中自动生成的字段以供使用

Posted

技术标签:

【中文标题】立即抓取mySql中自动生成的字段以供使用【英文标题】:Immediately grab auto-generated field in mySql for use 【发布时间】:2021-01-10 05:47:37 【问题描述】:

在此获取期间,它会创建一条新记录,并在 mysql 表中自动增加一个名为“employee_id”的字段。这部分工作正常。

但现在我想添加的是,如果可能的话,立即在同一个函数中,使用自动生成的值设置状态。这可能吗?

这是我当前状态下的函数。上面写着“this.setState(selectedEmployee...”的行当前中断了它。我要做的是设置 selectedEmployee 状态,以便我可以在那个 'createQuestions' 函数中使用它。

createInterview() 
    fetch(API_URL + `/interview/create`, 
      method: "PUT",
      body: JSON.stringify(
        employee: this.state.employee,
        employment_level: this.state.employment_level,
        audit_id: this.props.auditId,
      ),
      headers:  "Content-Type": "application/json" ,
    )
      .then((res) => 
        if (!res.ok) 
          throw new Error();
        
        return res.json();
      )
      .then((data) => console.log(data))
      .then((data) => this.setState( selectedEmployeeId: data.employee_id ))
      .catch((err) => console.log(err))
      .then(() => this.createQuestions())
      .then(() => this.getAllInterviews());

    this.setState( showHide: false );
  

这是我的 API 调用:

app.put("/interview/create", function (req, res) 
    console.log("It is getting to the route");
    const employee = req.body.employee;
    const employment_level = req.body.employment_level;
    const audit_id = req.body.audit_id;
    console.log(`employee: $employee`);
    console.log(`employment_level: $employment_level`);
    console.log(`audit_id: $ audit_id `);
    connection.getConnection(function (err, connection) 
        connection.query(
        `INSERT INTO audit_interview (employee, employment_level, audit_id)
            VALUES (?, ?, ?)`,
            [
                employee,
                employment_level,
                audit_id
            ],
        function (error, results, fields) 
            if (error) throw error;
            res.json(results);
            console.log(`Interview has been created`);
        
    );
    connection.release();
  );
);

【问题讨论】:

【参考方案1】:

是的,您可以在您的 nodejs 程序中重新获得 LAST_INSERT_ID() 的值。在您的完成回调中,添加对results.insertId 的引用,可能是这样的。它是传递给该回调的 results 项的属性。

        function (error, results, fields) 
            if (error) throw error;
            const insertId = results.insertId;
            res.json(results);
            console.log(`Interview has been created`);
        

而且,与这样的查询不同,

SELECT MAX(id) FROM table; /* don't do this, it's wrong! */

使用该results.insertId 值即使在大规模并发的情况下也是竞争条件证明的。

【讨论】:

以上是关于立即抓取mySql中自动生成的字段以供使用的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 立即返回新插入的行以供 GraphQL 使用的正确方法? [复制]

更新 MySQL 文本字段行时生成不需要的反斜杠

抓取网站时动态 JS 生成代码

插入php后获取生成的uuid

插入php后获取生成的uuid

爬虫应用--根据关键词自动抓取百度搜索记录并发送到指定邮箱