14. SQロックあるrとないrの`い
UPDATE `users` SET `money` = 4,
`updated_at` = '2015-02-25
11:07:28', `lock_version` = 3
WHERE (`users`.`id` = 2 AND
`users`.`lock_version` = 2)
SQロックがないときの
SQL
SQロックがあるときの
SQL
UPDATE `users` SET `money` =
4, `updated_at` = '2015-02-25
11:07:28¨ WHERE (`users`.`id` = 2)
15. 丑Qロックのg廾
?Railsの栽
?SQL
BEGIN
SELECT `users` WHERE (`users`.`id` = 2) FOR UPDATE
´
COMMIT または ROLLBACK
user = User.find_by!(id: 2) (あらかじめインスタンスを函誼しておく)
ActiveRecord::Base.transaction do
user.lock!
end
18. Id money
1 400
箭(Rails+MySQL)
User.transaction do
user = User.find_by(id: 1)
user.money += 400
user.save!
end
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = 800 WHERE id = 1;
COMMIT;
usersテ`ブル
SQLをだす
19. 箭リクエスト リクエスト
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = 800
WHERE id = 1;
COMMIT;
BEGIN;
SELECT * FROM users WHERE id = 1;
UPDATE users SET users.money = ? WHERE id =
1;
COMMIT
このとき、?に秘る、呂いつ
でしょう?
ほぼ揖rにリクエストがwんできた。
このときg佩されたSQLは參和の宥り