ホームページ  >  記事  >  データベース  >  mysqlでのNon-repeatable readを解決する方法

mysqlでのNon-repeatable readを解決する方法

coldplay.xixi
coldplay.xixiオリジナル
2020-09-02 13:50:198913ブラウズ

繰り返し不可能な読み取りを解決するための Mysql の方法: mvcc マルチバージョン同時実行制御が使用されます。mvcc は、各データの後に 2 つの隠し列、つまり作成バージョン番号と削除バージョン番号を使用します。各トランザクションはそこにあります。先頭には常に増分バージョン番号が付きます。

mysqlでのNon-repeatable readを解決する方法

[関連する学習の推奨事項: mysql の学習]

Mysql の非反復読み取りを解決する方法:

mysql では、デフォルトのトランザクション分離レベルは反復可能読み取り (反復可能読み取り) です。非反復読み取りを解決するために、innodb は次を使用します。この問題を解決するのが mvcc (複数バージョン同時実行制御) です。

mvcc は、各データの後に 2 つの非表示列 (バージョン番号の作成とバージョン番号の削除) を使用します。各トランザクションの先頭には増分バージョン番号が付きます。

新機能:

insert into user (id,name,age)values(1,"张三",10);

mysqlでのNon-repeatable readを解決する方法

更新:

update user set age = 11 where id = 1;

更新操作は削除追加によって実装されます。まず、現在のデータを削除としてマークします。

mysqlでのNon-repeatable readを解決する方法

そして、新しいデータを追加します:

mysqlでのNon-repeatable readを解決する方法

Delete: 削除操作は次のとおりです。削除されたデータのバージョン番号を現在のトランザクションのバージョン番号に直接更新します。

delete from user where id = 1;

mysqlでのNon-repeatable readを解決する方法

##Query 操作:

select * from user where id = 1;

Query 操作は回避するためのものです。古いクエリを実行するにはデータまたは他のトランザクションによって変更されたデータの場合は、次の条件を満たす必要があります:

1. クエリ中の現在のトランザクションのバージョン番号は、作成バージョン番号

以上である必要があります。

2. クエリ 現在のトランザクションのバージョン番号は、削除されたバージョン番号より小さい必要があります。

つまり、create_version これにより、トランザクションのクエリを回避できます。他のトランザクションによって変更されたデータ

以上がmysqlでのNon-repeatable readを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。