SequelizeでBulkInsertする方法

データベースに一気にデータを投入するBulkInsertの処理について調べてみました。

テーブル構成

下記のようなUsersテーブルを作成します。

カラム名 type
id int(11)
name varchar(255)
createdAt datetime
updatedAt datetime

BulkInsert

SequelizeでBulkInsertはbulkCreateというメソッドのようです。

'use strict';

const db = require('./models/index')

db.User
  .bulkCreate([{
    name: "羽生"
  },{
    name: "村山"
  },{
    name: "佐藤"
  },{
    name: "先崎"
  },{
    name: "丸山"
  },{
    name: "藤井"
  },{
    name: "森内"
  },{
    name: "郷田"
  }])
  .then(()=>{
    db.sequelize.close()
  })

SQL

INSERT INTO `Users` (`id`,`name`,`createdAt`,`updatedAt`) VALUES (NULL,'羽生','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'村山','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'佐藤','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'先崎','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'丸山','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'藤井','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'森内','2019-03-24 16:53:26','2019-03-24 16:53:26'),(NULL,'郷田','2019-03-24 16:53:26','2019-03-24 16:53:26');

実行後データ

id name createdAt updatedAt
1 羽生 2019-03-24 16:53:26 2019-03-24 16:53:26
2 村山 2019-03-24 16:53:26 2019-03-24 16:53:26
3 佐藤 2019-03-24 16:53:26 2019-03-24 16:53:26
4 先崎 2019-03-24 16:53:26 2019-03-24 16:53:26
5 丸山 2019-03-24 16:53:26 2019-03-24 16:53:26
6 藤井 2019-03-24 16:53:26 2019-03-24 16:53:26
7 森内 2019-03-24 16:53:26 2019-03-24 16:53:26
8 郷田 2019-03-24 16:53:26 2019-03-24 16:53:26

一気に削除

BulkInsertで入れたデータのid1〜5を一気に削除してみます。

'use strict';

const db = require('./models/index')

db.User
  .destroy({
    where: {
      id: [1,2,3,4,5]
    }
  })
  .then(()=>{
    db.sequelize.close()
  })

SQL

DELETE FROM `Users` WHERE `id` IN (1, 2, 3, 4, 5)

実行後データ

id name createdAt updatedAt
6 藤井 2019-03-24 16:53:26 2019-03-24 16:53:26
7 森内 2019-03-24 16:53:26 2019-03-24 16:53:26
8 郷田 2019-03-24 16:53:26 2019-03-24 16:53:26

参照