MySQL では、実行時におよびレベル スコープ内で動的システム変数を操作できます。トランザクション内でスコープ付きシステム変数を設定すると、コミットとロールバックによってそのスコープ付き変数が変更された状態のままになることに気付きました。システム変数の変更の範囲を単一のトランザクションに制限する方法、または少なくともロールバック時に元のトランザクション前の値にリセットする方法はありますか?GLOBAL
SESSION
SESSION
SESSION
これが関連する場所の例として、MySQL で NOWAIT がサポートされていないため、回避策として私が行っていることを次に示します。
SET @cachedTimeout = @@SESSION.INNODB_LOCK_WAIT_TIMEOUT;
SET @@SESSION.INNODB_LOCK_WAIT_TIMEOUT = 1;
SELECT * FROM sometable FOR UPDATE;
SET @@SESSION.INNODB_LOCK_WAIT_TIMEOUT = COALESCE(@cachedTimeout, @@SESSION.INNODB_LOCK_WAIT_TIMEOUT);
上記の例では、SELECT
何らかの理由でクエリが失敗した場合、以前のタイムアウト値にロールバックしたいと考えています。