導入
データベーストランザクションは、一連の操作を一つの単位として扱い、全ての操作が完了するか、一つでも失敗した場合には全てを元に戻す(ロールバックする)ための仕組みです。これにより、データの整合性と安全性が保たれます。本記事では、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を使用してトランザクションを管理することで、データの整合性を確保しつつ効率的にデータベース操作を行うことができます。トランザクションの正しい扱い方を学ぶことは、任意のバックエンド開発者にとって重要なスキルの一つです。
コメントを残す