NodeJs & MySql:当 table id 是 UUID 时,results.insertId 始终为 0
NodeJs & MySql: results.insertId always 0 when the table id is a UUID
我正在使用 NodeJs
mysql
包将记录插入到 MySql
table,然后尝试通过请求获取插入的记录 id
results.insertId
。但是,尽管正确插入了记录,但返回的 id 始终为零。
问题可能是 table 的 Primary Key
是 UUID (BINARY 16)
。如果我将其更改为 INT (11)
insertId
returns 正确的值。那么有办法解决吗?如果 UUID
我可以得到 insertId
吗?
这是我的代码:
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 }
您的 ID 列不是 AUTO_INCREMENT 列。这就是为什么你不能使用 insertId
您可以考虑在代码上生成 uuid
并将其作为参数插入到您的查询中。
或执行 2 个单独的查询:
SELECT UUID()
INSERT INTO my_table (id, title) VALUES ($uuid, ?)
您正在检查的 insertId 值仅在 auto_increment
键(必须是整数,而不是 UUID)的情况下才会填充。在这种情况下,键直接由插入查询生成,并且可以作为最后插入的 id 读取。
在您的情况下,UUID 是由插入查询生成的注释,而不是由 uuid()
函数生成。
您可以通过两种方式解决此问题:
- 您可以在 nodejs 中显式生成 uuid 并在插入查询中使用该值
- 您可以创建一个存储过程来生成 uuid、保存记录和 returns uuid。
我正在使用 NodeJs
mysql
包将记录插入到 MySql
table,然后尝试通过请求获取插入的记录 id
results.insertId
。但是,尽管正确插入了记录,但返回的 id 始终为零。
问题可能是 table 的 Primary Key
是 UUID (BINARY 16)
。如果我将其更改为 INT (11)
insertId
returns 正确的值。那么有办法解决吗?如果 UUID
我可以得到 insertId
吗?
这是我的代码:
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 }
您的 ID 列不是 AUTO_INCREMENT 列。这就是为什么你不能使用 insertId
您可以考虑在代码上生成 uuid
并将其作为参数插入到您的查询中。
或执行 2 个单独的查询:
SELECT UUID()
INSERT INTO my_table (id, title) VALUES ($uuid, ?)
您正在检查的 insertId 值仅在 auto_increment
键(必须是整数,而不是 UUID)的情况下才会填充。在这种情况下,键直接由插入查询生成,并且可以作为最后插入的 id 读取。
在您的情况下,UUID 是由插入查询生成的注释,而不是由 uuid()
函数生成。
您可以通过两种方式解决此问题:
- 您可以在 nodejs 中显式生成 uuid 并在插入查询中使用该值
- 您可以创建一个存储过程来生成 uuid、保存记录和 returns uuid。