こんにちは!Sです。
今回はデータベースのロックについて書きたいと思います。
DBで行う主な操作としては
①新規登録 ②更新 ③削除 ④参照
だと思いますが、同じテーブルに対して複数の人が同時に様々な操作を行うとデータの整合性がとれません。
そんなことにならないようにDBにはロックという機能が存在します。
ロックの粒度(行に対してのロックなのか、テーブルに対してのロックなのかなど)やルールは
使っているDBによって多少違うようですが、ここからはわたしが使っているSQL Serverについて書きます♪
◆ロックの種類
ロックには共有ロック、排他ロック、更新ロック、インテントロックなどがありますが、
難しいので詳細の説明は省きます。
初心者の方にまず覚えて頂きたいのは
①データの参照中は共有ロックがかかり、その間他の人が更新などできない
②削除などデータの書き換え中は排他ロックがかかり、他の人が何もできない
ということです。
(詳しく知りたい人はこちらやこちらを!)
バッチのスケジュールを組む際にはこれらのことを考慮しないといけないですね。
ちなみに排他ロックをどの粒度でかけるかは、SQL Serverが決めてくれます。
https://technet.microsoft.com/ja-jp/library/ms189286(v=sql.105).aspx
◆安全なおまじない
DBで行う操作の中で更新や削除はとても怖いですよね。。。
出来ればやりたくないですが、避けることはできません。
そんなとき上記のロックを利用して安全に操作を行うことができる魔法の呪文を教えてもらったので紹介します♪
1.まずはこれを書く
begin transaction
2.やりたいことをやる
update文 や delete文など
3.select文で思い通りの結果になっているか確認
4-A.やばい!思った通りの動きじゃない!というときは
ROLLBACK TRANSACTION
→これで元通り。なんの心配もいりません!
4-B.意図通り!成功!というとき
COMMIT TRANSACTION
→これを忘れずに!忘れると反映されません。
...余談ですが、わたしは今朝通勤途中に電車にすべての荷物を忘れてきました。
(別に寝ぼけていたわけでもないのに。。。)
電車を降りるところからROLLBACKしたいです。。。
登録:
コメントの投稿 (Atom)
URLはリンクを貼ってもらえるとうれしいな~
返信削除