MySQL2 バルクインサート・バルクアップデート - Node.js

  • 作成日:
  • 最終更新日:2025/06/23

バルクインサート

バルクインサート(Bulk Insert)とは、複数のデータを一括でデータベースに挿入する操作のことです。

バルクインサートのメリットには、以下のようなものがあります。

項目 内容
高速 SQL 実行回数が減るのでパフォーマンスが向上
ネットワーク効率 サーバとの通信回数が減る
トランザクション管理がしやすい まとめて一括コミットできる

注意点は、以下のようなものがあります。

  • データ量が多すぎると、SQLが長くなりすぎて失敗することがある
  • エラー時の特定が難しい(どの行で失敗したか把握しづらい)
  • 使用する ORM(Sequelize など)やライブラリごとに書き方が異なる

script.js

const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  database: 'mydb',
  password: 'password',
});


(async () => {
    let data = [
        ["taro", 30],
        ["jiro", 40]
    ]

    try {
        const [results, fields] = await pool.query('INSERT INTO users (name, age) VALUES ?', [data]);
        console.log(results);
    } catch (err) {
        console.log(err);
    }
    pool.end();
})();

バルクアップデート

バルクアップデート(Bulk Update)とは、複数のデータを一括で更新する操作のことです。

メリットや注意点は、バルクインサートと同じです。

「 ON DUPLICATE KEY UPDATE 句 」を使うと、UNIQUE インデックスまたは PRIMARY KEY の値が重複するとき更新します。

script.js

const mysql = require('mysql2/promise');

const pool = mysql.createPool({
  host: 'localhost',
  user: 'root',
  database: 'mydb',
  password: 'password',
});


(async () => {
    let data = [
        [1, "taro", 10],
        [2, "jiro", 10]
    ]

    try {
        const [results, fields] = await pool.query('INSERT INTO users (id, name, age) VALUES ? ON DUPLICATE KEY UPDATE `name` = VALUES(`name`), `age` = VALUES(`age`)', [data]);
        console.log(results);
    } catch (err) {
        console.log(err);
    }
    pool.end();
})();