MySQL Workbench和默认会话隔离级别

时间:2014-08-12 15:52:34

标签: mysql session workbench

我遇到了MySQL workbench 6.0 CE的问题,我将尽可能地解释它:

MySQL Workbench始终将会话变量@@tx_isolation设置为"REPEATABLE READ",更改此变量的唯一方法是使用SET tx_isolation='READ-COMMITTED';

我想要的是,当我启动工作台时,tx_isolation的默认会话变量是'READ-COMMITTED'而不是'REPEATABLE-READ';是的,我已更改了全局变量tx_isolation及其'READ-COMMITTED',但会话1未更改。

EJ:

SELECT @@Global.tx_isolation, @@tx_isolation;

分别返回'READ-COMMITTED''REPEATABLE-READ'

注意:如果我在MySQL命令行中查询与上面相同的代码,则两个变量都设置为'READ-COMMITTED',这就是为什么我认为这是一个问题使用MySQL Workbench而不是服务器。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但我仍然有同样的错误。

根据doc(https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read),默认隔离级别是REPEATABLE-READ。

这意味着数据库的快照是在事务的FIRST读取上进行的。此事务的每次其他读操作都将显示快照的数据。

因此,您需要结束事务(提交或回滚)以在下次读取时获取新快照。

我在AutoCommit上设置MySQL Workbench的同事看不到可重复读取的行为。我们发现它是因为在每个SELECT之后,事务被关闭并且创建了一个新的快照。

因此,由于该错误仍未得到纠正(正如Sithsu所提到的),解决方法将是:

  • 切换到自动提交以自动创建新快照
  • 或在每个SELECT之后提交/回滚以创建新快照