3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL トランザクション編

Last updated at Posted at 2019-09-14

トランザクションは

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

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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?