Sit*_*hsu 6 mysql transaction-isolation mysql-workbench isolation-level
我在使用.deb的Ubuntu系统中安装了MySQL Workbench(community-6.2.3)。
工作台会话似乎看不到其他会话(应用程序/命令行客户端)对数据库的更新(DML)。
一个新的会话可以在开始时看到数据库的正确状态,但是看不到其后发生的任何更改。
似乎在工作台中提交后,工作台会话确实与db同步。
我收到Error Code: 1412. Table definition has changed, please retry transaction
的时候我尝试查询表,我已经从不同的会话创建。
非工作台会话似乎没有任何这些问题。
我是否缺少配置或其他内容?
更新:
这部分是预期的行为,部分是错误。
我没有使用自动提交模式,在这种情况下,SELECT语句是使用第一次读取时建立的快照执行的。
这是REPEATABLE READ隔离级别的行为,该级别已由MySQL Workbench使用。
有没有办法更改或设置MySQL Workbench会话的默认隔离级别?
在工作台中执行时:
SELECT @@Global.tx_isolation, @@tx_isolation, @@session.tx_isolation;
Run Code Online (Sandbox Code Playgroud)
返回:
READ-COMMITTED, REPEATABLE-READ, REPEATABLE-READ
Run Code Online (Sandbox Code Playgroud)
相对于命令行客户端:
READ-COMMITTED, READ-COMMITTED, READ-COMMITTED
Run Code Online (Sandbox Code Playgroud)
相关:
MySQL REPEATABLE-READ Workbench事务级别未设置
MySQL Workbench和默认会话隔离级别
小智 4
这是一个老问题,但我仍然有同样的错误。OP 提到了另一个线程中 MySQL Workbench 上打开的错误(http://bugs.mysql.com/bug.php?id=69800)。
根据文档(https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read),默认隔离级别是REPEATABLE-READ。
这意味着数据库的快照是在第一次读取事务时创建的。此事务的每次其他读取都会向您显示快照的数据。
因此,您需要结束事务(提交或回滚)才能在下次读取时获取新快照。
我在 AutoCommit 上设置 MySQL Workbench 的同事没有看到可重复读取行为。我们发现这是因为每次 SELECT 之后,事务都会关闭并创建一个新快照。
因此,由于错误仍未得到纠正,解决方法是: