導入
データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、Node.js環境でMySQLデータベースを扱う際のトランザクションの基本的な使い方を解説します。
環境設定
まず、mysqlモジュールをプロジェクトにインストールする必要があります。Node.jsのプロジェクトルートで以下のコマンドを実行してください。
npm install mysql
データベース接続
次に、MySQLデータベースへの接続を設定します。この例では、データベースの設定を含むcreateConnectionメソッドを使用しています。
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'username',
password: 'password',
database: 'databaseName'
});
connection.connect(err => {
if (err) throw err;
console.log('データベースへの接続に成功しました!');
});トランザクションの開始
トランザクションを開始するには、beginTransactionメソッドを使用します。これにより、以降のクエリが一つのトランザクションとして扱われます。
connection.beginTransaction(err => {
if (err) throw err;
// トランザクション開始後の処理
});トランザクション内のクエリ実行
トランザクション内で複数のクエリを実行します。各クエリが成功したことを確認しながら進めます。
クエリが失敗した場合、ロールバックが行われます。
クエリにある「?」には、左から順にデータ配列の中身が挿入されます。これによって、SQLインジェクション攻撃を防いでいます。
const query1 = 'INSERT INTO table_name (column1) VALUES (?)';
const data1 = ['value1'];
connection.query(query1, data1, (err, results) => {
if (err) {
return connection.rollback(() => {
throw err;
});
}
const query2 = 'UPDATE table_name SET column2 = ? WHERE column1 = ?';
const data2 = ['value2', 'value1'];
connection.query(query2, data2, (err, results) => {
if (err) {
return connection.rollback(() => {
throw err;
});
}
// コミット処理へ
});
});トランザクションのコミットと終了
全てのクエリが成功した場合、commitメソッドを呼び出してトランザクションをコミットします。
connection.commit(err => {
if (err) {
return connection.rollback(() => {
throw err;
});
}
console.log('トランザクションのコミットに成功!');
});まとめ
このように、Node.jsとMySQLを使用してトランザクションを管理することで、データの整合性を確保しつつ効率的にデータベース操作を行うことができます。トランザクションの正しい扱い方を学ぶことは、任意のバックエンド開発者にとって重要なスキルの一つです。
