blogこの広告は、90日以上更新していないブログに表示しています。「別トランザクションでINSERTされたデータをこのトランザクションでSELECTしたらどうしよう....」と不安になってしまいました。そこでトランザクションの分離レベルについて調べたのでまとめていきたいと思います。トランザクションとはトランザクションとは、SELECTやUPDATEなど単一または複数のSQLクエリを含む一連の処理の単位を指します。この単位でコミットやロールバックをする事ができます。トランザクションが完了すれば障害があってもデータは保持される分離性という性質から、トランザクションは他トランザクションの変更の影響を受けないように互いに分離されています。この分離性は分離レベルとして段階に分けられており、用途に応じて調整する事ができます。分離レベルとはトランザクションの変更が他のトランザクションでどのように見えるのか、トランザクション同士の影響レベルのことです。READがデフォルトに採用されています。UNCOMMITTEDコミットされていない更新(UPDATE)・追加(INSERT)が他のトランザクションから見えてしまう状態です。そのため、ダーティリード(コミット前のデータを参照する現象)を引き起こす可能性があります。Serverコミットされた更新(UPDATE)・追加(INSERT)が他のトランザクションから見えてしまう状態です。コミット前のデータは参照できないのでダーティリードは起こりませんが、コミット後のデータは参照できるため、アンリピータブルリード/ファジーリード(コミット後の更新データを参照する現象)を引き起こす可能性があります。ーMySQLコミットされた追加(INSERT)が他のトランザクションから見えてしまう状態です。更新(UPDATE)に対しては他のトランザクションの影響を受けないため値そのものの整合性は保証されています。追加(INSERT)については影響を受けてしまうため、ファントムリード(コミット後の追加データを参照する現象)を引き起こす可能性があります。※MySQLではファントムリードを防いでいます。🚩SERIALIZABLEトランザクションにロックをかけることで直列に扱っている状態です。そのため、トランザクション内でSELECTされる値や数の整合性が保証されます。同じデータに対して複数のトランザクションが変更を行う場合、一方のトランザクションは待機しければなりません。READを採用しており、さらにファントムリードも防いでいます。そのため1つのデータに対して複数のトランザクションをかけていても特に気にする必要はなさそうです。【mysql】SQL文を高速化するためにEXPLAINを使うswift3でToDoリストアプリを作ってみた月別アーカイブはてなブログをはじめよう!mmmnn1257さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。