3

我在使用.deb的Ubuntu系統中安裝了MySQL Workbench(community-6.2.3)。MySQL Workbench會話沒有看到數據庫的更新

工作臺會話似乎沒有看到由其他會話(應用程序/命令行客戶端)完成的對數據庫的更新(DML)。
新會話能夠在其開始時看到數據庫的正確狀態,但是之後發生的更改不可見。
似乎工作臺會話在工作臺提交後與數據庫同步。

我收到Error Code: 1412. Table definition has changed, please retry transaction ,當我嘗試查詢從不同會話創建的表時。

非工作臺會話似乎沒有任何這些問題。

我是否缺少配置或其他?


更新:

這部分是預期的行爲,partly a bug

我是not using autocommit mode,在這種情況下SELECT語句使用第一次讀取時建立的快照執行。
這是REPEATABLE READ隔離級別的行爲,它被MySQL Workbench使用。

有沒有辦法更改或設置MySQL 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

+0

它發生在任何查詢? – Vertig0 2014-10-05 23:01:33

+0

@ Vertig0是的,從其他會話插入/更新/刪除不會反映在工作臺中。 – Sithsu 2014-10-05 23:14:21

+0

這似乎很像開始一個事務後預期的事情,取決於您配置的隔離級別......我們可以假設您不是故意開始一個事務嗎?發出一個'ROLLBACK;'會讓其他會話的變化可見,但問題仍然存在,如果你沒有啓動一個,你爲什麼要進行一個事務? – 2014-10-06 03:13:51

回答

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之後,事務關閉並創建一個新的快照。

所以,錯誤仍不改正,一個解決方法是:

  • 切換到自動提交的,以自動創建新的快照
  • 或提交/回滾後,各自選擇創建一個新的快照