3

MySQL 允许用户在运行时在两个和级别范围内操作动态系统变量。我注意到,如果您在事务中设置范围系统变量,提交和回滚会使该范围变量处于更改状态。有没有办法将系统变量的更改范围限制为单个事务,或者至少在回滚时将其重置为其原始的事务前值?GLOBALSESSIONSESSIONSESSION

作为与此相关的示例,由于 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查询由于某种原因失败,我想回滚到之前的超时值。

4

0 回答 0