【結論】
・トランザクションとは、データベースに対する
複数の処理(SQL文によるデータ処理)を、
一つにまとめた処理の事
・複数のSQL文による処理を個々に実行すると、
初めの処理でエラーが発生していても、
次の処理を行うなどして、データの整合性が保てなくなる
・関連する一連の処理を、一つの処理にまとめることで、
途中でエラーが発生した場合、全ての処理を実行しない様に
するなどして、データの整合性を保つ事が出来る
【目次】
【本題】
トランザクションとは
データベースに対する二つ以上の処理(SQL文による処理)を、
一つにまとめた処理の事を指します。
よく例に出されるのは、銀行の振り込みの処理です。
銀行の口座間の振り込みは、簡単にまとめると下記の流れで処理されます。
処理1:振り込み元の口座の残高を、出金額だけ減らす(出金処理)
↓
処理2:振り込み先の口座の残高を、出金額だけ増やす(入金処理)
上記の処理は、ユーザー側には一つの処理に見えますが、
実際にはそれぞれ別々のSQL文による処理です。
これらは、一つのSQL文に処理をまとめる事が出来ません。
しかし、それぞれ別々に処理を行うと、データの整合性が保てなくなります。
具体的に言うと、もし入金処理でエラーが発生場合、
振り込み先の残高は増えていないのに、
振り込み元の残高が減ってしまうという、
ユーザーに不利益を与える致命的な問題に発展してしまいます。
そこで登場するのが、トランザクションです。
トランザクションによって、複数のSQL文での処理を、
一つの処理としてまとめる事が出来ます。
それにより、途中の処理でエラーが発生すれば、
全ての処理を実行せずに完了させるという条件を組み込めます。
これにより、データの整合性が保たれ、正しく処理が行えられます。
トランザクションが必要な場面
先ほど述べた様な、個々の処理が独立していた場合に、
データの整合性に問題が発生する可能性がある場合、
トランザクション処理が必要になります。
他に例を出すと、フリマサイトでの退会処理があります。
処理1:ユーザーデータを削除する(退会処理)
↓
処理2:退会したユーザーが出品中の商品データを削除する(商品削除処理)
こちらも、もし個々の処理が独立していると、
退会したユーザーの商品が出品されたまま残り続ける
といった問題に発展する可能性があります。
ACID特性
トランザクションに必要な要素として、
ACID特性というものがあります。
・Atomicity(原子性)
全ての処理が完了するか?一切実行しないか?のどちらかで終了する。
処理が中途半端な状態で終わるという事が内容にする
・Consistency(一貫性)
常に整合性が保たれた状態にする
・Isolation(隔離性)
実行途中の状態が、他に影響を与えない様にする
複数のトランザクションを同時実行した場合と
逐次実行した場合で、処理結果が変化しない
・Durability(永続性)
トランザクション正常終了後は、データベースからデータが消えたり
内容が変化する事が無い様にする。
《今日の学習進捗(3年以内に10000時間に向けて)》
就活。
学習開始からの期間 :92日
今日までの合計時間:891h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:840h
目標との解離:51h
「10,000時間」まで、
残り・・・「9109時間!」