ファジーリード
別のトランザクションが UPDATE → COMMIT したデータが読み取れることにより、トランザクション内での一貫性がなくなる現象
サンプル
mysql1 と mysql2 のトランザクション分離レベルを READ COMMITTED に変更
code:sql
mysql1> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.02 sec)
mysql2> SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
Query OK, 0 rows affected (0.02 sec)
mysql2 のトランザクションを開始
code:sql
mysql> BEGIN;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT * FROM test;
+----+-----------+-----+
| id | name | age |
+----+-----------+-----+
| 7 | sato | 10 |
| 8 | suzuki | 20 |
| 9 | takahashi | 30 |
+----+-----------+-----+
3 rows in set (0.01 sec)
mysql1 のトランザクションを開始。 name takahashi の age を 40 に変更して commit
code:sql
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> UPDATE test SET age = 40 WHERE name = 'takahashi';
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)
mysql2 で SELECT を実行すると mysql1 が UPDATE したデータが見えてしまう
code:sql
mysql> SELECT * FROM test;
+----+-----------+-----+
| id | name | age |
+----+-----------+-----+
| 7 | sato | 10 |
| 8 | suzuki | 20 |
| 9 | takahashi | 40 |
+----+-----------+-----+
3 rows in set (0.00 sec)
#DB
#分離レベル