MySQL Workbench会话看不到数据库的更新

时间:2014-10-05 22:47:15

标签: mysql mysql-workbench isolation-level transaction-isolation

我使用.deb在Ubuntu系统中安装了MySQL Workbench(community-6.2.3)。

Workbench会话似乎没有看到其他会话(应用程序/命令行客户端)对数据库的更新(DML)。
新会话能够在其开始时看到数据库的正确状态,但之后发生的更改是不可见的。
在工作台中提交后,工作台会话似乎与db同步。

当我尝试查询我从其他会话中创建的表格时,我收到Error Code: 1412. Table definition has changed, please retry transaction

非工作台会话似乎没有任何这些问题。

我是否错过了配置或什么?


更新

这部分是预期的行为和partly a bug

not using autocommit mode,在这种情况下SELECT语句是使用第一次读取时建立的快照执行的。
这是REPEATABLE READ隔离级别的行为,MySQL Workbench使用它。

有没有办法更改或设置MySQL Workbench会话的默认隔离级别?

在Workbench中执行时:

SELECT @@Global.tx_isolation, @@tx_isolation, @@session.tx_isolation;

返回:

READ-COMMITTED, REPEATABLE-READ, REPEATABLE-READ

而不是命令行客户端:

READ-COMMITTED, READ-COMMITTED, READ-COMMITTED

相关:
MySQL REPEATABLE-READ Workbench transaction level not set
MySQL Workbench and default session isolation level

1 个答案:

答案 0 :(得分:2)

这是一个老问题,但我仍然有同样的错误。 OP在另一个线程(http://bugs.mysql.com/bug.php?id=69800)中提到了在MySQL Workbench上打开的错误。

根据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之后,事务被关闭并且创建了一个新的快照。

因此,由于该错误仍未得到纠正,因此解决方法将是:

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