(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

相关文章
相关标签/搜索