【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まで連絡を頂ければと思います!!!
(ついでにフォローしていただけると最高に嬉しいです笑)