1
0

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 3 years have passed since last update.

基本情報技術者試験 データベース編③

Last updated at Posted at 2021-07-16

#初めに
前回の続きです。

#トランザクション管理と排他制御
DBは複数の人が共有し、貯め込んだデータを出し入れできる便利なものです。
しかし、ユーザーが好き勝手にデータを操作できてしまうと大変なことになります。
スクリーンショット 2021-07-16 14.38.15.png
例えば、店員が「ハサミ」を同時に客に売ったとして「在庫数」を更新しようとします。
本来であれば、「在庫数」は3->2になり、2->1になるのが普通です。

ですが片方の処理中にもう一方が読み書きしているため、「在庫数が3」のままで表示されてしまいます。

結局、後から更新した店員には前の店員の更新が反映されていないので
「ハサミの在庫数」はおかしなままで放置といったとんでもない事が起きてしまいます。

他にも「更新作業中に別の人によってデータが削除されてしまった」など
誰も彼もが好き勝手に操作していると、データの不整合を引き起こしてしまいます。

そうした問題からDBを守るのがトランザクション管理排他制御です。

##トランザクション
一連の処理をまとめたものトランザクションと呼びます。
先ほどの例で出てきた店員が「在庫数を確認する」->「在庫数の更新」の流れがそうです。

このトランザクション単位で更新処理を管理します。

##排他制御
処理中のデータをロックし、他の人が読み書きできないようにする機能排他制御と呼びます。

つまり、トランザクションの間に使用するデータをロックしておけば
誰かに割り込まれてデータの不整合が生じるということが無くなるという訳です。

ロックする方法には2種類あり、

共有ロック:他のユーザーはデータを読むことはできますが、書くことは出来ません

専有ロック:他のユーザーはデータの読み書きが出来ません

といった特徴があります。

ロック機能は非常に便利な機能ですが注意しないといけない場合があリます。

例えば、AとBのデータがあったとして

・トランザクション1では、Aにアクセスしていて更新のためにロック
・トランザクション2では、Bにアクセスしていて更新のためにロック

していたとします。

この場合、お互いが更新のためにロックしているので
どちらも違うデータにはアクセスできません。

つまり、「お互いがお互いのロック状態を永遠に待ち続ける」といった事が引き起こされてしまいます。

これをデッドロックと呼びます。

こうなってしまったら、いずれか一方のトランザクションを
強制的にキャンセルしなければいけないので気を付ける必要があります。

##トランザクションに求められるACID特性
DBMS(データベース管理システム)では、トランザクション処理に対して
次の4つの特性(ACID特性)が必須とされています。

#####◯Atomicity(原子性)
トランザクションの処理結果が

全て実行されるか
まったく実行されないか

のいずれかで終了し、中途半端に一部だけ実行されるようなことは許しません。

なので、あくまでも全ての処理が正常に終わった時のみ、その内容がDBに反映されます。

#####◯Consistency(一貫性)
DBの内容が矛盾のない状態であることが重要です。

なのでトランザクションの処理結果が、矛盾を生じるような事になってはいけません。

#####◯Isolation(隔離性)
順番に実行した場合でも複数実行した場合でも処理結果が一致することが重要です。

つまり、排他処理(ロック機能)をきちんとやって相互に影響させないようにしないといけません。

#####◯Durability(耐久性)
正常に終了したトランザクションの処理結果は障害が発生してもDBから消失しないことが重要です。

何らかの復旧作業が保証されていないといけません。

##ストアドプロシージャ
ストアドプロシージャとはDBMSの機能の一つであり、DBを操作する一連の処理手順(SQL文)をコンパイルしてまとめ、DBMS側に保存した戻り値のない関数です。

ユーザー側は指定するだけで即実行可能です。

・ちまちまとSQL文を流す必要がないのでネットワークの負荷が軽減できる
・即実行可能な形式なので処理速度の向上が見込める
・保存も実行もDBMS側の機能なので呼び出し側の環境を気にせず、同じように利用可能

といったメリットがあります。

#おわりに
今回はここまでです。

間違っている部分や気になるところがあれば
コメントして下さると有り難いです。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?