如何在 Node.js 使用 mysql 套件做到資料批量更新
一直用 UPDATE 不斷失敗
本來想說跟批量插入的寫法差不多,但一直試都不行
const params = [
['PROCESSING', '111'],
['PENDING', '222']
]
const sql = 'UPDATE dashboards SET status = ?, WHERE dashboard_id = ?'
connection.query(sql, [parmas], (err, results, fields)
if (err) {
console.log('UPDATE ERROR')
throw err
}
})
改用 INSERT ... ON DUPLICATE KEY UPDATE
這個 SQL 在 INSERT 以前會先看看你插入的那些值跟資料表內的唯一索引有沒有衝突,有衝突的話就不會 INSERT 而是直接做 UPDATE,總之這樣就能達到批量更新了。
const params = [
['111', 'PROCESSING'],
['222', 'PENDING']
]
const sql = 'INSERT INTO dashboards (dashboard_id, status) VALUES ? ON DUPLICATE KEY UPDATE status = VALUES(status)'
connection.query(sql, [parmas], (err, results, fields)
if (err) {
console.log('UPDATE ERROR')
throw err
}
})
affected rows 會是 2
如果更新原本的一個 row 發現顯示的 affected row 是 2,這是正常的,下面這段話就是來自 MySQL 官方文件的。
With
ON DUPLICATE KEY UPDATE
, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if an existing row is updated, and 0 if an existing row is set to its current values.
參考資料
13.2.7.2 INSERT ... ON DUPLICATE KEY UPDATE Statement%20if%20an%20existing%20row%20is%20set%20to%20its%20current%20values.)
node.js中mysql批量更新的三种方法