LoginSignup
1
1

More than 1 year has passed since last update.

トランザクション

Last updated at Posted at 2021-10-01

いつもお世話になっております。
今日はトランザクションについてのお勉強してきました。
「トランザクションを学ぶオオカワウソ」
はい、ありがとうございます。
酒飲み駆け出しエンジニアラッパー、韻踏みました。

トランザクション

トランザクションとはデータベースに対して行われる一つ以上の更新処理のことです。
トランザクションによってデータの更新処理や取り消しを管理できます。

何いうとんねんどういう意味や。

データベースで考えるからややこしいんすよね。

Mサイズのライダースジャケットが3枚足りない時

日常生活で考えてみましょう。
QiitaStoreは日本に数店舗展開している人気アパレル会社です。

QiitaStoreのB店はライダースジャケットの売り上げが非常によかったそうです。
Mサイズが売り切れてしまったので、在庫過多になっているA店から3点取り寄せすることにしました。
OKを出したA店は早速ライダースジャケット3点をB店へ送りました。
ここで起こる事としては、B店の在庫が3点増えたと同時にA店から在庫が3店減ったという事です。
これがトランザクションです。
トランザクションを言い換えると、
複数の処理を一つにまとめたものってことですよね。
トランザクションの一つ一つの処理を分離することはできません。

A店はライダースジャケット3点差し引く

これだけを処理してしまうと
B店はライダースジャケットが3点増えますが、
A店は??となってしまいます。

そこでB店からA店への取り寄せ願いというトランザクション
①A店はライダースジャケット3点差し引く
②B店のライダースジャケットの在庫が3点増加
になります。
よってトランザクションは複数の処理を分離することができません。

トランザクションを作成

トランザクションとはデータベースに対して行われる一つ以上の更新処理のことです。

これについて考えていきましょう

トランザクションの使用にはトランザクションの開始宣言をしてから
各SQL文を記述していきます。
そしてトランザクションの最後にはトランザクションの確定、もしくは取り消す終了文を記述します。

START TRANSACTION;

UPDATE `magicians`
SET NAME = '虎杖悠仁'
WHERE ID = 1;

UPDATE `magicians`
SET NAME = '伏黒恵'
WHERE ID = 2;

COMMIT;

COMMIT

COMMITはトランザクションを確定させる処理です。
一度COMMITすると取り消しができないので注意。

ROLLBACK

ROLLBACKはトランザクションを取り消す処理です。
ROLLBACKするとトランザクション開始前の状態に戻ります。

トランザクションの4つの特性

トランザクションにはACID特性があります。
ACID特性はトランザクションに必要な4つの要素の事です。
それを最後に一つずつ。

Atomicity(原子性)

まず、AはAtomicity(原子性)です。
トランザクションの複数の更新処理は「すべて実行される」か「全く実行されない」の
2択だという事です。中途半端な処理結果になってはならないことを保証します。

Consistency(一貫性)

CはConsistency(一貫性)です。
トランザクションの終了状態にかかわらず、データベースの整合性が保たれていることを
保証します。、データベースのデータに矛盾を生じさせないという要素です。

Isolation(独立性)

IはIsolation(独立性)です。
複数のトランザクションが行われても、単独処理と同じように
他の処理からの影響は受けないことを保証します。

Durability(永続性)

トランザクションの更新結果は、障害が発生してもデータベースから失われないという保証です。
ハードウェアの障害が起こっても、更新処理に影響を与えないという要素です。
最後に、DはDurability(永続性)です。

この4要素いつまで経っても覚えられません。
どなたかいい覚え方ありませんかね…。

1
1
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
1
1