【问题标题】:MySQL Workbench session does not see updates to the databaseMySQL Workbench 会话看不到数据库的更新
【发布时间】:2014-11-30 05:27:24
【问题描述】:

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

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

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

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

我是否缺少配置或其他内容?


更新:

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

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

有没有办法更改或设置 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

【问题讨论】:

  • 任何查询都会发生这种情况?
  • @Vertig0 是的,来自其他会话的插入/更新/删除不会反映在工作台中。
  • 这似乎与您开始事务后的预期差不多,具体取决于您配置的隔离级别......我们可以假设您不是故意开始事务吗?发出ROLLBACK; 将使您可以看到其他会话的更改,但问题仍然存在,如果您没有开始交易,您为什么要进行交易。

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


【解决方案1】:

这是一个老问题,但我仍然有同样的错误。 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。

这意味着数据库的快照是在第一次读取事务时创建的。对该事务的每一次读取都会向您显示快照的数据。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-01-25
    • 2020-04-12
    • 2019-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2021-11-15
    相关资源
    最近更新 更多