Laravelトランザクション使用悲観的ロック

laravelは、あなたが間違った場所を書きやすく混乱し、ここで記録されるように、使用中の見当違いのいくつかの場所、希望に遭遇し、使用のデータベース・トランザクションに便利で効率的な方法を提供して偉大な神がアドバイスを取得します

laravel情勢は、手動モードと自動モードに分けます。

下に示すように、しかし、我々は提供sharedLockまたはlockForUpdateロックテーブルのlaravelを使用する方法は、不必要なトラブルやミスを避けるために、それはマニュアルを使用するのが最適であるかどうは、ハンドルにトランザクションをコミットします。

ここで何sharedLock(共有ロック)とlockForUpdate(悲観的ロッキング)は、2つの使用の影響との間の差

sharedLock(共有ロック)

sharedLockを使用してSQL文と同じ 

選択 から transaction_test ここでタイプ=  1つのロック共有モード。

他の操作を変更することはできません、データの行がブロックされますsharedLockを使用して、データがロックされているときに、トランザクションに反映させるためには、そのデータはロックされている、クエリには影響は、クエリは、通常の業務かどうかではありません問合せ操作には影響しません。

トランザクションがコミットまたはロールバックされた後のデータは、それがリリースされます、あなたが知っている、ロックされています。

lockForUpdate(悲観的ロック)

SQLステートメントは、更新のためlockForUpdate transaction_testここでタイプ= 1を使用するときから選択することと等価です。

lockForUpdateは、他のトランザクションがテーブル操作がエグゼクティブに提出される現在のトランザクションを待つことになるロックの瞬間にロックされているlockForUpdateデータ行を使用して、トランザクションに有効になりますが、非ロックテーブルと共通クエリ操作と制限がないため、そこにありますちょうどの影響は、取引実行の操作で、あなたに同じテーブルをロックします。

要するに、それは非ロックテーブル運転中に共有ロックまたはペシミスティック・ロック、唯一の平均問合せ操作のためのトランザクションを実行するために、ロックテーブルの動作に影響を与える、およびトランザクションであるかどうか影響を及ぼしません。

行レベルロックでロックされている修正するMySQLの行、それ以外の場合は、テーブルロックが全ロックに使用する。また、いずれも悲観的ロックやインデックスに関連する共有ロックのSQL文、及び時クエリまたは判断するための基礎としてインデックスは注意テーブル、必ずインデックスでは、使用時にそう、それ以外の場合は、高並行性の問題につながります。

 

リンクします。https://www.php.cn/phpkj/laravel/436036.html

おすすめ

転載: www.cnblogs.com/clubs/p/11949206.html