実務でSQLやDBについて理解していないといけないと思い勉強を始めました。
その内容をまとめます。
トランザクションはなぜ必要か
DBMSにSQL文で指示すれば基本的には間違った処理にはならないですが、
データの書き換え途中で別の人が同じデータを更新していたり、PCの電源が落ちて処理が途中で中断してしまったりするとデータがおかしくなることは考えられます。
エラーハンドリングと同じで「そもそも正しく処理されない可能性」を考えることは大切です。
例えば
Aさんが自分の口座から10000円をBさんに振り込みしたとします。
①Aさんの口座の残高が10000円減る。
②ここで異常がおきて処理が中断。
③Bさんの残高は増えない。
みたいなことが考えられます。
ただ単に残高が減っただけという恐ろしい事態に...
銀行のシステムを作ってくれている方々のおかげで安心して振り込み処理ができているんですね。ありがたや。
トランザクションとは
「処理をひとかたまりにする」
ことを言います。
先ほどの例でいうと
①Aさんの残高が10000円減る。
②Bさんの残高が10000円増える。
をひとかたまりにするので、どちらかだけ実行されることはありえないということになります。
つまり、どちらも実行される
かどちらも失敗する
のどちらかということです。
使い方
BEGIN
からCOMMIT
までのSQL文を1つのトランザクションとして扱います。
BEGIN;
処理
COMMIT;
また、取り消しをしたい場合は以下のようにします。
BEGIN;
処理
ROLLBACK;
上記のようにトランザクションすることで誰か他の人がDBを変更できないように明示的にロックをかけていることにもなるようです。
以上です。