6

.deb を使用して Ubuntu システムに MySQL Workbench (community-6.2.3) をインストールしています。

Workbench セッションは、他のセッション (アプリケーション/コマンド ライン クライアント) によって行われたデータベースへの更新 (DML) を認識していないようです。
新しいセッションは、開始時にデータベースの正しいステータスを確認できますが、その後に発生した変更は表示されません。
ワークベンチでコミットした後、ワークベンチセッションがデータベースと同期しているようです。

Error Code: 1412. Table definition has changed, please retry transaction 別のセッションから作成したテーブルをクエリしようとすると、エラーが発生します。

ワークベンチ以外のセッションには、これらの問題はないようです。

構成か何かがありませんか?


アップデート:

これは、一部は予期された動作であり、一部はバグです。

私は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 トランザクション レベルが設定されていません
MySQL Workbench とデフォルトのセッション分離レベル

4

1 に答える 1

3

これは古い質問ですが、まだ同じバグがあります。OP は、別のスレッド ( http://bugs.mysql.com/bug.php?id=69800 )で MySQL Workbench で開かれたバグについて言及しました。

ドキュメント ( https://dev.mysql.com/doc/refman/5.7/en/innodb-transaction-isolation-levels.html#isolevel_repeatable-read ) によると、デフォルトの分離レベルは REPEATABLE-READ です。

これは、データベースのスナップショットがトランザクションの最初の読み取りで作成されることを意味します。このトランザクションを 1 回おきに読み取ると、スナップショットのデータが表示されます。

したがって、次の読み取りで新しいスナップショットを取得するには、トランザクション (コミットまたはロールバック) を終了する必要があります。

AutoCommit で MySQL Workbench を設定した私の同僚は、反復可能な読み取り動作を確認しません。これは、各 SELECT の後、トランザクションが閉じられ、新しいスナップショットが作成されるためであることがわかりました。

したがって、バグはまだ修正されていないため、回避策は次のようになります。

  • 新しいスナップショットが自動的に作成されるように自動コミットに切り替えます
  • または、各 SELECT の後にコミット/ロールバックして、新しいスナップショットを作成します
于 2016-11-29T11:01:10.180 に答える