我正在使用MySql
NodeJs
包将记录插入到mysql
表中,然后尝试通过请求id
来获取插入的记录results.insertId
。但是,尽管正确插入了记录,但返回的ID始终为零。
问题可能是表的Primary Key
是UUID (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 }
答案 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()
函数生成的。
您可以通过两种方式解决此问题: