首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL工作台会话没有看到对数据库的更新

MySQL工作台会话没有看到对数据库的更新
EN

Stack Overflow用户
提问于 2014-10-05 22:47:15
回答 1查看 3.5K关注 0票数 6

我使用MySQL在Ubuntu系统中安装了.deb工作台(Community6.2.3)。

工作台会话似乎看不到其他会话(应用程序/命令行客户端)对数据库的更新(DML)。

新会话能够在数据库开始时看到数据库的正确状态,但随后发生的更改对它是不可见的。

在工作台中提交之后,工作台会话似乎确实与db同步。

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

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

我是不是漏掉了配置什么的?

更新:

这在一定程度上是预期的行为和部分是一只小虫

我是不使用自动提交模式,在这种情况下,使用在第一次读取时建立的快照来执行SELECT语句。

这是MySQL工作台使用的可重复读取隔离级别的行为。

是否有方法更改或设置MySQL工作台会话的默认隔离级别?

在工作台中执行时:

代码语言:javascript
复制
SELECT @@Global.tx_isolation, @@tx_isolation, @@session.tx_isolation;

返回:

代码语言:javascript
复制
READ-COMMITTED, REPEATABLE-READ, REPEATABLE-READ

相对于命令行客户端:

代码语言:javascript
复制
READ-COMMITTED, READ-COMMITTED, READ-COMMITTED

相关信息:

MySQL可重复读工作台事务级别未设置

MySQL工作台和默认会话隔离级别

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 11:01:10

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

根据doc (可重复读),默认的隔离级别是可重复读取的.

这意味着数据库的快照是在事务的第一次读取时生成的。此事务的其他读取将显示快照的数据。

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

我在AutoCommit上设置AutoCommit工作台的同事没有看到可重复读取的行为。我们发现这是因为在每次选择之后,事务将被关闭并创建一个新的快照。

因此,由于该bug仍未得到纠正,解决办法如下:

  • 切换到自动提交,以便自动创建新快照
  • 或在每次选择后提交/回滚以创建新快照
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26208007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档