トランザクションは
「データベースに対する1つ以上の更新をまとめて呼ぶ時の名称」です。
トランザクションを使う目的は、処理の途中で予期せぬトラブルでコンピューターの処理が中断してしまった時に整合性を保たせるためです。
例えば、銀行の処理
Aさんの口座からBさんの口座に1万円を移す処理。
①Aさんの口座から1万円引く
↓
②Bさんの口座に1万円増やす
もし①が終わった段階で処理が滞ってしまったら、Aさんの口座は1万円減っているのにBさんの口座には1万円入っていないという不整合が起きてしまいます。
なので上記のような処理を「1セット」とし、途中で終わったらその処理が「なかったこと」にすればいいですね。そして、最後まで処理が終わって初めて「完了」になれば整合性は保たれます。
###・ACID
・Atomicity(原子性)
処理を一つの塊とし、「処理が全く行われない」OR「処理が完全に終わる」のいずれか。途中まではありえません。
###・Consistency(一貫性)
データベースにあらかじめ設定された制約は最後まで守られる。
###・Isolation(独立性)
割り込み禁止。トランザクション同士が互いに干渉を受けないことを保証。
###・Durability
永続性。トランザクションが終了したら、その時点でのデータの状態が保存されることを保証する。
BEGIN TRANSACTION;
処理1
処理2
COMMIT;
(処理がなかったことにするには、ROLLBACK)
--トランザクション
BEGIN TRANSACTION;
--処理1
UPDATE Shohin
SET hanbai_tanka = hanbai_tanka - 1000
WHERE shohin_mei = 'カッターシャツ';
--処理2
UPDATE Shohin
SET hanbai_tanka + 1000
WHERE shohin_mei = 'Tシャツ';
COMMIT;
トランザクションの処理に慣れる
自分の練習方法:
AをBに変更する場合、トランザクションを使わない場合、やっぱり戻したいと思ったら反対にBをAに変更する処理が必要になります。
トランザクションを使えば、BEGIN TRANSACTIONを先に書き、
処理を書いていきます。あとはCOMMITさえしなければ、処理する前の状態に戻したい場合は、最後にROLLBACKを書けばOKです。
本番で失敗したくないので、練習用のデータベースで色々試してみるのはオススメです。