NodeJs和MySql:当表ID为UUID时,results.insertId始终为0

时间:2019-01-21 11:52:20

标签: mysql node.js uuid

我正在使用MySql NodeJs包将记录插入到mysql表中,然后尝试通过请求id来获取插入的记录results.insertId。但是,尽管正确插入了记录,但返回的ID始终为零。

问题可能是表的Primary KeyUUID (BINARY 16)。如果我将其更改为INT (11),则insertId返回正确的值。那么有没有办法解决呢?如果是insertId,我可以得到UUID吗?

这是我的代码:

pool.query('insert into my_table (id, title) '
                    + ' values(uuid(), ?', [ title ],
  function (error, results, fields) {
    if (error) {
      console.log(error);
      reject(error);
    } else {
      resolve(results);
    }
 }

完整的results对象:

OkPacket {
  fieldCount: 0,
  affectedRows: 1,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  protocol41: true,
  changedRows: 0 }

2 个答案:

答案 0 :(得分:1)

您的ID列不是AUTO_INCREMENT列。这就是为什么您不能使用insertId

您可以考虑在代码上生成uuid,并将其作为参数插入查询中。

或执行2个单独的查询:

SELECT UUID()
INSERT INTO my_table (id, title) VALUES ($uuid, ?)

答案 1 :(得分:1)

仅在使用auto_increment键(必须为整数,而不是UUID)的情况下填充您要检查的insertId值。在这种情况下,键是由插入查询直接生成的,并且可以作为最后插入的ID读取。 就您而言,UUID是由插入查询生成的注释,而不是由uuid()函数生成的。

您可以通过两种方式解决此问题:

  • 您可以在nodejs中显式生成uuid,并在插入查询中使用该值
  • 您可以创建一个存储过程,该存储过程生成uuid,保存记录并返回uuid。