■SELECT FOR UPDATEとは、
複数のプログラムで在庫の更新などが行われる場合に、
使用するべきでしょうか?
■SELECT FOR UPDATEのロック期間は、他の更新が待たされるのは
下記2.~3.の間でしょうか?
バッチ更新(5分)
1.トランザクション開始
2.SELECT FOR UPDATE
3.UPDATE
4.トランザクション終了
■上記2.のSELECT FOR UPDATEがおこなれた時点のレコードに対し、
他の場所でSELECT FOR UPDATEした場合、
上記2.の時点のデータがSELECTされるのでしょうか?
それとも、上記3.が終わるまでSELECTを待つのでしょうか?
DBは、MySQL5ですが、DB問わず同じ挙動と思い、
このカテゴリに質問されていただきました。
No.2ベストアンサー
- 回答日時:
#1回答者です。
#1回答にも書いたように、排他制御はRDBMSにより仕様差があります。一方で様々なオプションがあり、似たような制御にすることも可能です。
MySQLでも、ストレージエンジンの種類で排他単位が変わったり、排他制御の強さや区間を変える様々なオプションがあります。
MySQLについて調べてみました。
>複数のプログラムで在庫の更新などが行われる場合に、
>使用するべきでしょうか?
複数のユーザが接続する環境で、関連する複数の表、あるいは複数の行を検索、更新する場合に使います。
>SELECT FOR UPDATEのロック期間は、他の更新が待たされるのは
>下記2.~3.の間でしょうか?
FOR UPDATE指定でSELECT実行~トランザクション終了までです。
>上記2.のSELECT FOR UPDATEがおこなれた時点のレコードに対し、
>他の場所でSELECT FOR UPDATEした場合、
>上記2.の時点のデータがSELECTされるのでしょうか?
>それとも、上記3.が終わるまでSELECTを待つのでしょうか?
FOR UPDATE同士の検索が複数ユーザからあると、先に検索した側がその行を占有するため、後続ユーザは排他待ちになります。待ち解除されるのは、先行ユーザがCOMMITしてくれた時点です。
マニュアル参照先
http://dev.mysql.com/doc/refman/4.1/ja/commit.html
http://dev.mysql.com/doc/refman/4.1/ja/innodb-lo …
http://dev.mysql.com/doc/refman/4.1/ja/innodb-tr …
マニュアルの参照先までありがとうございます。
MySQLコマンドを2つ起動して、
やってみたところ、排他待ちになりました。
制御はRDBMSにより仕様差が結構あるのですね。。
1.BEGIN
2.処理
3.BEGIN
でもコミットされてしまいました。
とりあえずファイルロックで逃げる事にしましたが、
ロックはなかなか奥が深く難しいですね。
DBを変えたら試行錯誤が必要と感じました。
No.1
- 回答日時:
>DBは、MySQL5ですが、DB問わず同じ挙動と思い、
>このカテゴリに質問されていただきました
排他制御の挙動は、RDBMS毎に相当な違いがあります。
MySQLについて知りたいなら、MySQLのカテゴリで質問してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 下の画像はSQLの4大命令の性質をまとめたものであるらしいです UPDATE INSERT DELE 1 2023/06/07 15:36
- Oracle SQL update方法 2 2022/06/22 14:07
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- VPN 何これ 1 2022/04/19 01:32
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAで実行時エラー'424' オブジェクトが必要ですと出る 2 2022/10/07 09:25
- Excel(エクセル) ②Excel 簡単にシートコピーしたら前日の残高と日付を変更させたい→マクロの記録でエラーが出ます 8 2022/07/16 20:40
- Windows 10 windows11 update の「更新の再開」について初歩的な質問なのですが 1 2022/10/19 00:57
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SELECT文でのデッドロックに対...
-
SQLServer Insertが遅い
-
SELECT時の行ロックの必要性に...
-
Oracleの排他制御について教え...
-
accessのロック
-
INSERTにおいてロック処理は必要か
-
DB2のロック調査
-
同一トランザクションの中でテ...
-
トランザクション中にSELECTし...
-
UPDATE文で発生するデッドロッ...
-
ExcelからAccess2013DBを更新す...
-
DB2の更新ロックについて
-
SELECT FOR UPDATE にトランザ...
-
Oracleで構築されているDBをMyS...
-
更新ロックとデッドロック
-
MongoDBのデータ更新はDBを排他...
-
トランザクションの考え方
-
DB2でSelectした時(rollback,c...
-
排他ロックしたレコードが、別...
-
エクセルでCtrl+Tでテーブルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLがPostgreSQLより優れてい...
-
SELECT時の行ロックの必要性に...
-
accessのロック
-
SELECT文でのデッドロックに対...
-
Oracleの排他制御について教え...
-
INSERTにおいてロック処理は必要か
-
SQLServer Insertが遅い
-
UPDATE文で発生するデッドロッ...
-
AccessShareLock はどの程度気...
-
同時書き込み
-
同一トランザクションの中でテ...
-
SELECT FOR UPDATE にトランザ...
-
更新ロックとデッドロック
-
ExcelからAccess2013DBを更新す...
-
排他ロックしたレコードが、別...
-
トランザクション中にSELECTし...
-
DB2のロック調査
-
DB2でSelectした時(rollback,c...
-
SQLServerの明示的なロックの仕...
-
SELECT文でタイムアウト...
おすすめ情報