MySQL允许用户在运行时在GLOBAL
和SESSION
级范围内操作dynamic system variables。我注意到,如果在事务中设置了SESSION
范围的系统变量,则提交和回滚会使SESSION
范围变量保持其更改状态。 有没有办法将系统变量的更改范围限制为单个事务,或者至少在回滚时将其重置为原始的事务前值?
作为相关内容的一个示例,以下是我正在做的解决方法due to the lack of NOWAIT support in MySQL:
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
查询因任何原因失败,我想回滚到之前的超时值。