2016年3月14日月曜日

開発初心者がこれだけは知っておいた方が良いこと④

こんにちは!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したいです。。。




Related Posts:

  • CASE式を使用して、主キーを入れ替える方法 SQLこんにちは山田です。 気温もぐーんとあがり、 やっと春らしくなってきました。今日この頃。 さて、SQLの話題です。既存コードをリファクターできそうなものを見つけたので、その備忘録になります。 ■目的 「主キー」もしくは「ユニークキー」の値を入れ替えて、 並び替え機能をつくります。 ■テーブル… Read More
  • 開発初心者がこれだけは知っておいた方が良いこと④こんにちは!Sです。 今回はデータベースのロックについて書きたいと思います。 DBで行う主な操作としては ①新規登録 ②更新 ③削除 ④参照 だと思いますが、同じテーブルに対して複数の人が同時に様々な操作を行うとデータの整合性がとれません。 そんなことにならないようにDBにはロックという機能が… Read More
  • datetimeの列でデータを抽出したい!岡田です。 データを抽出するときってだいたい数値か文字列で検索を書けるのですが、今回あまりなじみのないdatetime型の列で抽出しなくてはいけない作業があったので、メモしておきます。 例えばその日時が2000年12月31日だった場合は、、、 select top 100 * from d… Read More
  • 【SQLserver】DBテーブル内のカラムにコメントを登録するこんにちわ、開発者のⅠです。 さて、今回はDB操作に関するお話です。 クエリ文を作成しそれをプログラム上で実行することで、新規テーブルの作成やカラム追加など、様々な操作が可能です。 その中で、今回はカラムにコメントを登録する方法を伝えします。 カラムの定義変更や追加には【ALTER TABLE】… Read More

1 件のコメント: