JavaScriptとMySQLでトランザクションを実現する方法

導入

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

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です