web-dev-qa-db-ja.com

読み取りクエリの実行中にレコードが変更される可能性はありますか?

読み取り(選択)クエリRがテーブルから約100レコードを読み取っていて、これまでに50レコードが読み取られたとすると、その間に書き込みクエリWは未読レコードの一部を変更できますか?

テーブル(またはレコードの読み取り)をロックしませんでした。

単一のレコードの読み取り(すべてのレコードの読み取り)がアトミック操作であることは明らかだと思いますが、いくつか(おそらく数百万)のレコードを読み取るかどうかはわかりません。アトミック操作ですか?その間に書き込みクエリが実行される可能性があり、読み取りクエリの開始時にすべてのレコードの一貫したスナップショットが必要な場合、(1つのクエリで)複数のレコードを読み取るときに読み取りロックを取得する必要がありますか?実行されましたか?

MySQLを使用しています。

1
user40602

はい、それは可能であり、これは望ましい場合と望ましくない場合があります。データベース理論には、他のプロセスに対するトランザクションの可視性に関する isolation の概念があります。 set transaction に関するMySqlのドキュメントには、製品固有の構文に関する説明があります。

2
vonPryz