(sequelize)bulkCreate函數中的updateOnDuplicate參數怎麼使用

(sequelize)bulkCreate函數中的updateOnDuplicate參數怎麼使用?node

前言:

Sequelize中提供的增刪改查相關的函數都能轉成原生的sql語句。本篇文章介紹一個不是很常見可是有時候批量插入很方便的函數——bulkCreate。mysql

bulkCreate講解

官方文檔理解

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

對應原生sql語句講解

在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

相關文章
相關標籤/搜索