因为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