MySQLひどいなー。これ、DBとして失格じゃない?
3人以上だともっと楽しいことが出来るかもね!
3人以上だともっと楽しいことが出来るかもね!
-- フェーズ1
-- 前提処理
CREATE TABLE SIMPLE_TEST (
ID CHAR(8) NOT NULL,
NAME VARCHAR(64) NOT NULL,
PRIMARY KEY (ID)
)
ENGINE = InnoDB;
INSERT INTO SIMPLE_TEST (ID, NAME) VALUES ('0001', 'オリジナルネーム1');
INSERT INTO SIMPLE_TEST (ID, NAME) VALUES ('0002', 'オリジナルネーム2');
-- フェーズ2
-- Aさん作業
-- Aさんトランザクション開始
SELECT * FROM SIMPLE_TEST;
UPDATE SIMPLE_TEST SET NAME = '名前上書き' WHERE ID = '0001';
-- Bさん
-- Bさんトランザクション開始
SELECT * FROM SIMPLE_TEST;
-- フェーズ3
-- Aさん作業
-- Aさんコミット
-- フェーズ4
-- Bさん作業
SELECT * FROM SIMPLE_TEST;
-- ↑Aさんがコミットした値が見えない。
UPDATE SIMPLE_TEST SET NAME = '名前上書き' WHERE ID = '0001';
-- ↑UPDATE件数が0件で正常に終わる。
SELECT * FROM SIMPLE_TEST;
-- ↑UPDATEされたと思っている値が見えない。
-- Bさんコミット
-- ↑仮にCさんが別作業でコミットしててもBさんがやろうとした更新は何も反映されない。
トランザクション内でSELECTすると、作業コピー作って、それを見るみたいなんだけど、
「UPDATE時に作業コピーではなくてマスターのコミット済み領域を見てUPDATE結果が変わらなそうなら何もしない」とか言う制御してるっぽい。
DBとして失格な気がする(゜▽、゜
「UPDATE時に作業コピーではなくてマスターのコミット済み領域を見てUPDATE結果が変わらなそうなら何もしない」とか言う制御してるっぽい。
DBとして失格な気がする(゜▽、゜