前提条件
例えば以下のような状況を想定しています。
- 1億件のデータが入っているテーブル users を作成する。エンジンはInnoDBを選択。
- 以下SQLを実行する
update users set column = 1;
3. 2のSQL実行途中で以下のSQLを実行する
select * from users where column = 1;
聞きたい事
3の時どのような結果が得られますか?
以下の資料を読む限り2のようなSQLを実行すると自動的にトランザクションが作成されてロックがかかると理解しました。
なので、私はCと思っているのですがあっていますでしょうか?
https://dev.mysql.com/doc/refman/5.6/ja/commit.html
- A. 実際にテーブル情報が書き換えられるのはSQL
実行完了後
なので、途中に実行した3のSQLの結果は0
件。 - B. 実際にテーブル情報が書き換えられるのはSQL
実行途中
なので、途中に実行した3のSQLの結果は0~1億
件。 - C. update実行中はテーブルがロックされるので、2のSQL実行後に3のSQLが実行される。よって3のSQLの結果は1億件。
環境
MariaDB 10.5.5