機能説明
DDL は NO_WAIT オプションと WAIT オプションをサポートしています。DDL 操作では、WAIT オプションを使用して MDL LOCK の待機秒数を設定できます。設定時間内に MDL LOCK を取得できない場合、直接返します。また、NO_WAIT オプションを指定すると、MDL LOCK を取得できない場合に直接返します。
SELECT FOR UPDATE は NOWAIT オプションと SKIP LOCKED オプションをサポートしています。従来の SELECT FOR UPDATE ロジックでは、対象行データが他のトランザクションによってロックされている場合、そのトランザクションがロックを解放するまで待機する必要があります。しかし、秒殺キャンペーンなどの特定のシナリオではロック待機を望まない場合があります。SKIP LOCKED オプションと NOWAIT オプションは、ロック待機を必要としない機能を提供します。SKIP LOCKED ステートメントはロックされている行をスキップし、これらの行は結果セットに表示されません。NOWAIT ステートメントはロックされている行に遭遇しても待機せず、エラーが返されます。
注意すべき点は、この2つのNO WAITで使用されるキーワードが異なることです。
サポートバージョン
カーネルバージョン TDSQL-C for MySQL 5.7 2.0.23/2.1.9 以降。
カーネルバージョンはTDSQL-C for MySQL 8.0の3.1.10以上です。
適用シーン
DevAPI/XPlugin は現在、SELECT FOR UPDATE/SHARE ステートメントでの SKIP LOCKED および NOWAIT オプションの使用をサポートしていません。歴史的な経緯により、DDL の NO_WAIT キーワードと SELECT FOR UPDATE の NOWAIT キーワードは異なるものであるため、区別にご注意ください。