(sequelize)bulkCreate函數中的updateOnDuplicate參數怎麼使用?node
Sequelize中提供的增刪改查相關的函數都能轉成原生的sql語句。本篇文章介紹一個不是很常見可是有時候批量插入很方便的函數——bulkCreate。mysql
bulkCreate() - 建立多條記錄程序員
bulkCreate(records, [options]) -> Promise.<Array.<Instance>>
複製代碼
批量建立並保存多個實例。sql
處理成功後,會在回調函數中返回一個包含多個實例的數組。數據庫
參數數組
名稱 | 類型 | 說明 |
---|---|---|
records | Array | 要建立實例的對象(鍵/值 對)列表 |
[options] | Object | |
[options.fields] | Array | 要插入的字段。默認所有 |
[options.validate=true] | Boolean | 插入每條記錄前進行驗證 |
[options.hooks=true] | Boolean | 在執行前/後建立鉤子 |
[options.individualHooks=false] | Boolean | 在執行前/後爲每一個實例建立鉤子 |
[options.ignoreDuplicates=false] | Boolean | 忽略重複主鍵(Postgres不支持) |
[options.updateOnDuplicate] | Array | 若是行鍵已存在是否更新(mysql & mariadb支持). 默認爲更新 |
[options.transaction] | Transaction | 在事務中執行查詢 |
注意:options.updateOnDuplicate參數中的行鍵已存在個人理解是:數據庫表中現有的記錄的惟一索引或者主鍵若是已經存在,執行更新操做bash
在MySQL數據庫中,若是在insert語句後面帶上ON DUPLICATE KEY UPDATE 子句。微信
看下面的代碼:函數
//對應的node.js代碼
db.usernotice.bulkCreate(userNoticeRecord,{validate: true, updateOnDuplicate: ["user_id", "notice_id", "update_time"]});
//生成對應的原生sql語句代碼
INSERT INTO `usernotice` (`id`,`user_id`,`notice_id`,`is_read`,`is_zan`,`create_time`) VALUES (NULL,'m_******','345345',false,false,'2019-05-27 17:25:07') ON DUPLICATE KEY UPDATE `user_id`=VALUES(`user_id`),`notice_id`=VALUES(`notice_id`),`update_time`=VALUES(`update_time`);
複製代碼
歡迎你們關注個人公衆號——程序員成長指北。請自行微信搜索——「程序員成長指北」spa