MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのストアドプロシージャ内でSTART TRANSACTIONを実行する方法

MySQLでは、START TRANSACTIONを実行すると新しいトランザクションが開始され、自動コミット(auto-commit)モードがオフに設定されます。これにより、明示的にCOMMITまたはROLLBACKを実行するまで、データの変更内容は確定されません。

以下の例では、START TRANSACTIONを含むストアドプロシージャを作成し、employee.tblテーブルに新しいレコードを挿入します。まず、対象となるテーブルには現在、次のデータが格納されています。

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
| 1  | Mohan   |
| 2  | Gaurav  |
| 3  | Rahul   |
+----+---------+
3 rows in set (0.00 sec)

ストアドプロシージャの作成例

次のように、デリミタを変更してプロシージャを作成します。BEGINブロック内でSTART TRANSACTIONを実行し、その後INSERT文で新しいレコードを追加しています。

mysql> Delimiter //
mysql> Create Procedure st_transaction()
    -> BEGIN
    -> START TRANSACTION;
    -> INSERT INTO employee.tbl(name) values ('Saurabh');
    -> END //
Query OK, 0 rows affected (0.00 sec)

プロシージャの実行と結果の確認

作成したプロシージャを呼び出すと、employee.tblテーブルに新しい値が挿入されます。

mysql> Delimiter ;
mysql> Call st_transaction();
Query OK, 0 rows affected (0.17 sec)

mysql> Select * from employee.tbl;
+----+---------+
| Id | Name    |
+----+---------+
|  1 | Mohan   |
|  2 | Gaurav  |
|  3 | Rahul   |
|  4 | Saurabh |
+----+---------+
4 rows in set (0.00 sec)

実行結果を見ると、「Saurabh」という名前のレコードがId 4として正常に追加されていることが確認できます。

補足:COMMITとROLLBACKの活用

実際の開発では、トランザクション内の処理が成功した場合にCOMMITで変更を確定し、エラーが発生した場合にはROLLBACKで変更を取り消すのが一般的です。例えば、DECLARE EXIT HANDLER FOR SQLEXCEPTIONを組み合わせれば、エラー発生時に自動的にロールバックする堅牢なストアドプロシージャを作成できます。複数のINSERTやUPDATEをまとめて扱う際に、トランザクション制御はデータ整合性を保つために非常に有効です。

  1. MySQLストアドプロシージャ内でCOMMITによるトランザクション制御を行う方法

    MySQLでは、START TRANSACTIONステートメントでトランザクションを開始し、開始後に行われた変更内容を確定(永続化)するためにCOMMITを使用します。この2つはストアドプロシージャの中でも問題なく組み合わせて利用できます。本記事では、ストアドプロシージャ内でSTART TRANSACTIONとCOMMITを使い、テーブルへの新規レコード挿入と更新をまとめてコミットする具体例を紹介します。準備:対象となるテーブルのデータ以下の例では、「employee.tbl」というテーブルに対して操作を行います。事前のデータは次の通りです。mysql> Select * from em

  2. MySQLストアドプロシージャ内で別のストアドプロシージャを呼び出す方法

    MySQLのストアドプロシージャは、その内部で別のストアドプロシージャを呼び出すことが可能です。これはCALLステートメントを使用することで実現でき、処理をモジュール化して再利用性を高める上で非常に便利な機能です。ここでは、あるストアドプロシージャが別のストアドプロシージャを呼び出し、last_insert_id()を取得する具体例を見ていきましょう。サンプルテーブルの作成まず、例として使用するテーブルを作成します。以下のテーブルは、自動採番されるIDと名前を持つ従業員テーブルです。mysql> CREATE TABLE employee.tbl(Id INT NOT NULL AUTO