sql >> データベース >  >> RDS >> Mysql

mysql dbreadが古いデータを返す原因は何ですか?

    クライアントがデータベースの独自のスナップショットに存在しているように見えます。これは、REPEATABLE-READ分離レベルを使用して開いているトランザクションがある場合に当てはまります。つまり、そのクライアントがトランザクションを開始した後にコミットされたデータは、そのクライアントには表示されません。

    回避策の1つは、新しいトランザクションを強制的に開始することです。古いデータを表示しているように見えるクライアントセッションでCOMMITを実行するだけです。これにより、開いているトランザクションがすべて解決され、次のクエリで新しいトランザクションが開始されます。

    テストできるもう1つの方法は、ロック読み取りを使用することです。クエリ SELECT ... FOR UPDATEなど 。これにより、クライアントのトランザクション分離レベルに関係なく、最後にコミットされたデータが読み取られます。つまり、クライアントがREPEATABLE-READを使用してトランザクションを開始した場合でも、ロックされた読み取りは、READ-COMMITTEDを使用してトランザクションを開始したかのように動作します。




    1. Golangで*DB.exec()またはプリペアドステートメントを使用するのはなぜですか?

    2. 以前のレコードを見つける方法[n-per-groupmax(timestamp)<timestamp]?

    3. mysqldumpを使用したmysqlデータベースのバックアップ

    4. TSQL-データベース内のすべてのテーブルに列を追加する[カーソルの例]