MySQL 关于 NodeJS 中的重复键更新
MySQL ON DUPLICATE KEY UPDATE in NodeJS
我正在使用带有 MySQL 和 async/await 语句的 NodeJS。我在 MySQL table 中有一个名为 audioid
.
的 UNIQUE 列
我需要检查是否存在 audioid。如果是这样,我需要更新一行。如果不是,我需要插入一行。我正在使用 MySQL's 所以这是查询;
try {
if(tag1){
row_b = await db.query( "SELECT tagid FROM tags WHERE tagname = ?", [tag1]);
if (row_b > 0){
const tagid1 = row_b[0].tagid;
console.log('tagid first = ' + tagid1);
row_c = await db.query(
"INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?", [tagid1, audioid, tagid1]
);
}
else {
row_d = await db.query( 'INSERT IGNORE INTO tags (tagname) VALUES (?)', [tag1]);
const tagid1 = row_d.insertId;
console.log('tagid 2nd = ' + tagid1);
row_e = await db.query(
"INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?", [tagid1, audioid, tagid1]
);
}
console.log('success!');
res.json('success!');
}
}
但是控制台出现错误;
[ RowDataPacket { tagid: 11 } ]
tagid 2nd = 0
ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE audioid = 26 ON DUPLICATE KEY UPDATE tagid1 = 0' at line 1
INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?
在 SQL 基础上是错误的,因为插入会创建一个新行,因此没有适用的 WHERE 条件。如果您想指定重复检查应该在 audioid 上进行,那么您应该在 table 上创建一个索引,并在该字段上使用 UNIQUE 属性。
正确的查询(仅从语法角度)是
INSERT INTO entitytag (tagid1) VALUES (?)
ON DUPLICATE KEY UPDATE tagid1 = ?
没有示例数据、预期结果和 table 结构,这是猜测的问题,但有效的(功能上的)查询可能是:
INSERT INTO entitytag (tagid1, audioid) VALUES (?,?)
ON DUPLICATE KEY UPDATE tagid1 = ?
我正在使用带有 MySQL 和 async/await 语句的 NodeJS。我在 MySQL table 中有一个名为 audioid
.
我需要检查是否存在 audioid。如果是这样,我需要更新一行。如果不是,我需要插入一行。我正在使用 MySQL's 所以这是查询;
try {
if(tag1){
row_b = await db.query( "SELECT tagid FROM tags WHERE tagname = ?", [tag1]);
if (row_b > 0){
const tagid1 = row_b[0].tagid;
console.log('tagid first = ' + tagid1);
row_c = await db.query(
"INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?", [tagid1, audioid, tagid1]
);
}
else {
row_d = await db.query( 'INSERT IGNORE INTO tags (tagname) VALUES (?)', [tag1]);
const tagid1 = row_d.insertId;
console.log('tagid 2nd = ' + tagid1);
row_e = await db.query(
"INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?", [tagid1, audioid, tagid1]
);
}
console.log('success!');
res.json('success!');
}
}
但是控制台出现错误;
[ RowDataPacket { tagid: 11 } ] tagid 2nd = 0 ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE audioid = 26 ON DUPLICATE KEY UPDATE tagid1 = 0' at line 1
INSERT INTO entitytag (tagid1) VALUES (?) WHERE audioid = ?
ON DUPLICATE KEY UPDATE tagid1 = ?
在 SQL 基础上是错误的,因为插入会创建一个新行,因此没有适用的 WHERE 条件。如果您想指定重复检查应该在 audioid 上进行,那么您应该在 table 上创建一个索引,并在该字段上使用 UNIQUE 属性。
正确的查询(仅从语法角度)是
INSERT INTO entitytag (tagid1) VALUES (?)
ON DUPLICATE KEY UPDATE tagid1 = ?
没有示例数据、预期结果和 table 结构,这是猜测的问题,但有效的(功能上的)查询可能是:
INSERT INTO entitytag (tagid1, audioid) VALUES (?,?)
ON DUPLICATE KEY UPDATE tagid1 = ?