控制MySQL事务范围内的系统变量

时间:2013-10-02 18:24:55

标签: mysql sql transactions

MySQL允许用户在运行时在GLOBALSESSION级范围内操作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查询因任何原因失败,我想回滚到之前的超时值。

0 个答案:

没有答案