はじめに
データベースの操作において「トランザクション」は、データの整合性を保つうえで欠かせない重要な概念です。
個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。
この記事では、MySQLを中心にトランザクションの基本とその使い方について、自分用にまとめておきます。
書こうと思ったきっかけ
複数のSQLを連続で実行する中で、一部の処理だけが成功して残りが失敗する状況がありました。データが中途半端な状態にならないようにしたいと思い、トランザクションの理解と使い方を整理するためにこの備忘録を作成しました。
トランザクションとは?
トランザクションは、ひとまとまりのデータベース処理を1つの単位として扱う機能です。すべての処理が成功することで初めて反映され、途中で失敗した場合はすべて取り消されます。
ACID特性
- Atomicity(原子性):すべての処理は一つの単位として完全に実行されるか、まったく実行されないか。
- Consistency(一貫性):トランザクション前後でデータの整合性が保たれる。
- Isolation(独立性):他のトランザクションの影響を受けずに処理が行われる。
- Durability(永続性):トランザクションが完了したら、その結果は永続的に保存される。
トランザクションの基本操作
-- トランザクション開始
START TRANSACTION;
-- SQL文を実行
UPDATE accounts SET balance = balance - 10000 WHERE id = 1;
UPDATE accounts SET balance = balance + 10000 WHERE id = 2;
-- 正常に終わったら確定
COMMIT;
-- エラーがあったら取り消す
ROLLBACK;
注意点
-
COMMIT
を忘れると、変更が永続化されません。 - 自動コミットが有効な場合は、明示的に
SET autocommit = 0;
で無効化する必要があります。 - 一部のストレージエンジン(例:MyISAM)はトランザクションをサポートしていません。(自分調べ)
まとめ
トランザクションを正しく使うことで、データの整合性を守りながら安心して複雑な操作を行うことができます。今後は、より複雑なトランザクション制御やエラーハンドリングも含めて実践していきたいと思います!