ITとdesign エンジニアのブログ by エンジ庭

IT業界のトレンドなどIT分野について学んだ事を書いていきます。プログラミング技術などについて現在Qiitaメインに書いてますので、そちらを参照ください。  https://qiita.com/kota_sho

SQL トランザクション編

2019-08-25

 

トランザクション

「データベースに対する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です。

 

本番で失敗したくないので、練習用のデータベースで色々試してみるのはオススメです。