MySQL Workbench会话看不到数据库的更新
作者:互联网
我使用.deb在Ubuntu系统中安装了MySQL Workbench(community-6.2.3).
Workbench会话似乎没有看到由其他会话(应用程序/命令行客户端)完成的对数据库的更新(DML).
新会话能够在其开始时看到数据库的正确状态,但之后发生的更改不会对其可见.
在工作台中提交后,工作台会话似乎与db同步.
我收到错误代码:1412.表定义已更改,请重试事务
当我尝试查询我从其他会话创建的表时.
非工作台会话似乎没有任何这些问题.
我错过了配置或其他什么?
更新:
这部分是预期的行为和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
解决方法:
这是一个老问题,但我仍然有同样的错误.
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之后提交/回滚以创建新快照
标签:mysql,mysql-workbench,isolation-level,transaction-isolation 来源: https://codeday.me/bug/20190708/1403325.html