CODE

【SQL初心者必見】DBのテーブルを意図的にロックする方法

こんにちは!ニタマサ=NewM(@NewM07x2)です。

本記事ではよくwebサービスのテスト工程で役に立つデータベース内の特定のテーブルを意図的にロックする方法を2通りご紹介します。

なぜ意図的にテーブルをロックする必要があるのか?

と疑問があるかも知れません。

ここでポイントは”テスト工程”で行うことです。

”テスト工程”はWebサービスを構築したら正常に動いているか、バグがないかを見ていきますよね。

データが何かの原因で登録・更新ができなかったりした場合の処理も確認するはずです。

その際に、意図的にロックしてSQLが正常に動かなかった時の処理を確認する便利なSQLなので、ぜひ使いこなして、欲しいです!

設定環境

今回設定していく環境は以下の通りになっています。

  • MAMP : 5.3
  • phpMyAdmin : 5.7.25

※2020/03時点

設定準備

特にありませんが、phpMyAdminを開けるようにしておいてください。
SQL Serverでも問題ないので、SQLを実行できる環境を整備をお願いします!

方法①

まずは時間無制限にテーブルをロックする方法です。

以下のSQLになります。

①
begin tran
select * from テーブル名 with(TABLOCKX)

②
rollback 

まず、①のSQLを実行します。これでOKです。

続いてロックした状態を解除する方法です。

その方法は②のSQLを実行します。これでロックは解除されます。

注意点として、②のSQLを流さない限り、永遠にロックしたままになってしまうので、テストが終わったら必ず解除しておきましょう!

方法②

続いて、時間を指定してロックする方法になります。

SQLは以下です。

BEGIN TRAN
   SELECT * FROM TABLEA WITH(TABLOCKX)
   WAITFOR DELAY '00:01:00'  --任意の時間スリープ。
COMMIT TRAN

この方法のメリットは時間してしているので、ロックの解除を忘れてしまっても問題はないです。

また、時間を長く設定してしまっても実行を停止しても解除されるので、オススメです。

まとめ

いかがだったでしょうか。

今回はDBのテーブルを意図的にロックする方法をご紹介してきました。

このSQLは知っておいて損はないSQLですし、必ず役に立つと思うので、ぜひ是非使ってみてください!

もし、この記事に関して分からない事や質問がある場合は、お問い合わせページまたはTwitterのDMまで連絡を頂ければと思います!!!
(ついでにフォローしていただけると最高に嬉しいです笑)