見出し画像

トランザクション、参照整合性、トリガー 職業訓練48日目

トランザクションとは

複数の更新処理を1つのまとまりとして扱うことです。

よく例に出されるのが銀行の送金業務です。

例えばAさんの講座は残高が2万円あります。AさんはBさんに対して1万円送金しました。

一方でBさんの残高は10万円です。

つまりこの送金が完了したらAさんは残高1万円、Bさんは11万円になります。

処理の流れとしては、処理1Aさんの残高2万円ー1万円

その後、処理2Bさんの残高10万円+1万円です。

処理1は正常に処理が完了し、処理2はエラーが発生した場合はAさんが損をすることになります。

したがってどちらかにエラーが発生した場合は処理を完了せず、どちらとも処理が完了した場合のみ処理を完了するのがトランザクションです。

トランザクションの基本構文

start transaction; ← トランザクションを開始します。

トランザクションを開始した後データの編集のためのソースコードを入力します。

正しく処理ができていることを確認できたら↓

commit; ← これで処理を完了します。

----------------------------------------------------------------------------

ちなみにcommitする前にrollbackという操作をするtransactionを開始する前までの状態に戻ります。

排他制御とは

排他制御とは同じデータを複数人で扱う場合、同時にデータを更新されないようにするための仕組みです。排他制御には悲観的排他制御と楽観的排他制御があります。

悲観的排他制御

先にデータを取得にしたほうがデータを更新できる。

楽観的排他制御

先にデータを更新した方がデータを更新できる。

参照整合性とは

テーブルAとテーブルBがあります。テーブルAが親テーブルで、テーブルBが子テーブルです。テーブルAにあるフィールドaは主キーです。テーブルBにあるフィールドbは外部キーです。したがってフィールドbはフィールドaを参照しています。

この場合フィールドbはフィールドaに無いデータを挿入することや更新することはできないというものです。

ただし、外部キー設定時に

on update cascade←親テーブルの自動更新

on delete cascade ←親テーブルの自動削除

などを最後につけることでデータの操作が可能になります。

トリガーとは

トリガーとはあらかじめ指定したテーブルが更新されたときに、自動的に処理を行う仕組みです。カウントをとったり、ログを残す際に使われます。

トリガーの基本構文

create trigger inc_deliv_cnt(トリガー名)

after(いつ) update(どのような処理) on delivery(テーブル名)

for each row←おまじない

update  dliv_cnt set count = count+1; ← 処理内容

----------------------------------------------------------------------------

↑の例文ではdeliveryという出荷表のようなテーブルがあると仮定し、商品が出荷されるごとに、カウントが更新されるトリガーを作成しました。

今日はこの辺で失礼します。ありがとうございました。


この記事が気に入ったらサポートをしてみませんか?