Slide 37
Slide 37 text
37/72
TX1 TX2
SELECT GET_LOCK('users:1', 60); ロック
BEGIN; スナップショット
SELECT
GET_LOCK('users:1', 60);
ロック待ち
SELECT * FROM users WHERE id=1 FOR UPDATE; ユーザー情報取得
SELECT value FROM user_items WHERE user_id=1
AND item_id=1;
スナップショットか
ら value: 1 を取得
UPDATE user_items SET value=1+1 WHERE user_id=1
AND item_id=1;
value: 2 に更新
COMMIT;
SELECT RELEASE_LOCK('users:1'); ロック解除
Lost Update 対策 1: GET_LOCK