INSERT的安全替代方式... SELECT ... ON DUPLICATE KEY UPDATE

时间:2014-06-08 05:35:59

标签: mysql sql

  

因为INSERT ... SELECT语句的结果取决于   SELECT中的行排序和此顺序并不总是如此   保证,当记录INSERT ... SELECT ON DUPLICATE时有可能   主要和奴隶发散的KEY UPDATE语句。从而,   在MySQL 5.6.4及更高版本中,INSERT ... SELECT ON DUPLICATE KEY UPDATE   语句被标记为不安全,用于基于语句的复制。

我想知道是否有一种安全的替代方式来执行此指令并在同一事物上保持安全。例如。我想用以下架构创建一个投注游戏:

Player       (player_id, player_name)
Player_Score (player_id, league_id, score)
Match        (match_id, league_id, team1_id, team2_id)
Player_Bet   (match_id, player_id, league_id, option)

假设我想更新在指定比赛中赢得赌注的所有玩家的得分。

INSERT INTO Player_Score (player_id, league_id, score)
SELECT player_id, league_id, 1 FROM Player_Bet 
WHERE `option` = 1 AND match_id = 2
ON DUPLICATE KEY UPDATE score = score + 1

0 个答案:

没有答案