2

私は検索しましたが、何も見つからないようです。

状況は次のとおりです。

  • t1 = テーブル 1
  • t2 = テーブル 2
  • v = テーブル 1 とテーブル 2 を結合したビュー

1.) ユーザー 1 がデータベースにログインしています。しますSELECT * FROM v;

2.) ユーザー 2 は同じデータベースにログインしており、ログインしていINSERT INTO t1 VALUES(1, 2, 3)ます。

3.) ユーザー 1 は別の操作を行います。ユーザー 1 はSELECT * FROM v;、ログアウトして再度ログインするまで、ユーザー 2 から挿入された行を見ることができません。

ビューが「セッション」間で同期されないようですか? ユーザー 1 が INSERT を表示できるようにするにはどうすればよいですか?

参考までに、私は python と mysqldb を使用しています。

4

2 に答える 2

1

ログアウトして再度ログインする代わりに、ユーザー 2 は単純にトランザクションをコミットできます。

MySQL InnoDB テーブルはトランザクションを使用し、1 つ以上の SQL ステートメントの前に BEGIN を必要とし、その後に COMMIT または ROLLBACK を必要とするため、すべての更新/挿入/削除が発生するかどうかにかかわらず発生します。ただし、明示的に発行されていない場合は自動 BEGIN になり、接続が閉じられると自動 COMMIT になる「機能」があります。これが、他のユーザーが接続を閉じた後に変更が表示される理由です。

トランザクションを明示的に開始してコミットする習慣を実際に身に付ける必要がありますが、別の方法もあります: connection.autocommit = True を設定すると、すべての SQL 更新/挿入/削除が独自の暗黙的なトランザクションにラップされます。当初予想していた動作。

上で述べたことを完全に事実として正しいとは思わないでください。しかし、何が起こっているかの基本とそれを制御する方法を説明するのに十分です。

于 2012-08-16T00:59:48.813 に答える
0

MySQL UPDATEコマンドの使用に関連していますか? http://dev.mysql.com/doc/refman/5.0/en/update.html

于 2012-08-16T06:24:02.847 に答える