ひろです。
こんばんは。かとうです。
一応実験してみました。同内容で何度かやってみましたが、select文に
On 12/08/28 0:31, ひろ wrote:
> 実は「もしかして」と思い、例2のパターンと同じようにcommitを試してみたのですが、
> 再ログインするまで最新の結果は取れませんでした。
> そうかと思うと、何もしなくても例1のC3で最新のデータが取れる時もありました。
> それで途方に暮れてしまった次第です。
"LOCK IN SHARE MODE"や"FOR UPDATE" をつけてロックを獲得した場合には、
commitせずとも更新後の内容を取得していますが、ロックを獲得しない単
純なselect文の場合には更新前の内容しか出てきませんでした。
実験環境: VineSeed + MySQL-5.5.25
*実験1: 単純なselect文
-----------------------------------------------------------------
mysql> select * from test;
+----+------+
| id | val |
+----+------+
| 1 | 100 |
+----+------+
1 row in set (0.00 sec)
(※) ここで別端末から更新
mysql> select * from test;
+----+------+
| id | val |
+----+------+
| 1 | 100 | <--------------------- 変化なし
+----+------+
1 row in set (0.00 sec)
mysql> select * from test; <------------- 念のため再度実行
+----+------+
| id | val |
+----+------+
| 1 | 100 | <--------------------- 変化なし
+----+------+
1 row in set (0.01 sec)
mysql> commit; <--------------------- commitしてみる
Query OK, 0 rows affected (0.00 sec)
mysql> select * from test;
+----+------+
| id | val |
+----+------+
| 1 | 200 | <--------------------- 変化あり
+----+------+
1 row in set (0.00 sec)
-----------------------------------------------------------------
*実験2: ロックありselect文を使ってみる
-----------------------------------------------------------------
mysql> select * from test;
+----+------+
| id | val |
+----+------+
| 1 | 200 |
+----+------+
1 row in set (0.00 sec)
(※) ここで別端末から更新
mysql> select * from test;
+----+------+
| id | val |
+----+------+
| 1 | 200 | <--------------------- 変化なし
+----+------+
1 row in set (0.00 sec)
mysql> select * from test for update; <-- ロックありでselectしてみる
+----+------+
| id | val |
+----+------+
| 1 | 300 | <--------------------- 変化あり
+----+------+
1 row in set (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
-----------------------------------------------------------------
ちょっと古いですが、以下のサイトにトランザクション分離レベルごとの
MySQLの挙動の説明がありましたのでご覧ください。
http://www.y2sunlight.com/ground/?MySQL4.1%2F9.MySQL%A4%CE%BC%C2%B8%B3%2F4.%A5%C8%A5%E9%A5%F3%A5%B6%A5%AF%A5%B7%A5%E7%A5%F3
--
__________________________________________________
_/_/ Tomohiro "Tomo-p" KATO <tomop@teamgedoh.net>
_/_/ Team Gedoh Network http://www.teamgedoh.net/
_/_/ Key fingerprint = A6D8 3981 3575 9F00 EFC3 9C2B F03A 5383 9287 74D9