MySQLなどのリレーショナルデータベースを使いこなしていくと、いずれぶつかるのがトランザクション処理です。トランザクション処理は実務を担うデータベースでは必須の知識であり、ノウハウになります。
今後、データベース系の仕事に携わるのであれば、しっかりとトランザクションの基礎を身に着けることが大切です。
では、MySQLのトランザクション処理について基礎から確認してみましょう。
トランザクション概要
まずはトランザクションとは何かを概略から説明します。
冒頭で実務にとってトランザクションが大切であると言いましたが、実際の運用を想定して解説します。例えば銀行でお金を振り込むとします。お金を振り込むということは、振込元の口座から振込先の口座にお金が移ることです。つまり、振込元からは振込金額と同等の金額が減り、振込先には同等の金額が増えることになります。
この時、振込元の口座残高が足りていれば、振込処理は確定します。しかし、仮に足りなかったとします。そうすると、振込元から減らしたお金は元に戻し、振込先の増加させたお金も元に戻すことになります。
このように複数の処理が正常に終了すれば確定し、何らかの事情で正常に終了しない場合は、元に戻す処理をトランザクション処理といいます。
MySQLのトランザクション構文
では実際にトランザクション処理を構文で見てみます。
トランザクションの構文は基本的には以下の通りです。
- START TRANSACTION または BEGIN
- 新しいトランザクションを開始する宣言になります。この後に実際のSQL処理を記載することになります。
- COMMIT
- トランザクションをコミットして、上記で記載されたSQLを永続的なものにします。
- ROLLBACK
- 上記のSQLで処理が確定できなかった場合、トランザクションをロールバック(処理前に復帰)し、更新や削除の変更を取り消します。
- SET autocommit
- 自動コミットモード。デフォルトでは有効になっているので、これを無効または有効にします。
プログラム言語でトランザクションを利用する
一般的にアプリケーションはプログラミング言語で記載されることが多いです。JAVAやC言語、WEBではPHPなどの言語を指します。
また、よく使われる処理としてはtry-catc文にトランザクションが組み込まれます。つまり、例外処理が発生した場合にロールバックでデータを元に戻し、正常に終了した場合はコミットして永続化させます。
また、finally文を使うことで、例外が発生してもしなくても、共通の処理を実行することもできます。
以下が実際のトランザクションを利用した構文の例になります。
try {
SQL文の発行
COMMIT(コミット)
} catch (引数) {
例外が発生
ROLLBACK(ロールバック)
} finally {
例外に関係なく必ず実行される共通処理
}
まとめ
トランザクションの処理がなければ実務に耐えられるアプリケーションは作れない、といってよいほどデータベースにとってトランザクションは重要な機能です。例外処理と組み合わせてトランザクションを活用することで、データの整合性が失われない安定した運用が可能になります。
トランザクション機能をよく理解し、想定外のエラーで困らないようにデータベースを使いこなしましょう。
ソフトエイジェンシー関連製品URL
https://www.softagency.co.jp/products/mysql