バルクインサート
バルクインサート(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();
})();