【问题标题】:UPDATE ON DUPLICATE KEY issue更新重复密钥问题
【发布时间】:2013-02-21 20:43:33
【问题描述】:

我正在努力做到这一点:

$sql = mysql_query("SELECT COUNT(fk_player_id) count FROM wr_year WHERE fk_player_id=$currplayer AND year=2013");
$row = mysql_fetch_assoc($sql);

if($row['count'] == 0){
   mysql_query("INSERT INTO wr_year (fk_player_id, year, points) VALUES ($currplayer, 2013, $points)");
} else {
   mysql_query("UPDATE wr_year SET points=points+$points WHERE fk_player_id=$currplayer AND year=2013");
}

进入这个:

mysql_query("INSERT INTO wr_year (fk_player_id, year, points) VALUES ($currplayer, 2013, $points)
ON DUPLICATE KEY UPDATE points=points+$points");

但这行得通吗?如何确保它只在 fk_player_id 和 year 上检查 ON DUPLICATE,并且可以做到吗?

提前致谢 ;-)

【问题讨论】:

标签: php mysql query-optimization


【解决方案1】:

ON DUPLICATE KEY 检查索引违规以查看是否应该插入或更新,因此您需要首先在要检查的两列上创建唯一索引;

CREATE UNIQUE INDEX uix_wr_year ON wr_year (fk_player_id, year);

之后,如果表中已经存在相同的 fk_player_id/year 组合,它将改为更新。

【讨论】:

  • 刚刚完成了工作...谢谢 ;-)
【解决方案2】:

使用VALUES 函数。

试试这个

     INSERT INTO wr_year (fk_player_id, year, points) VALUES ($currplayer, 2013, $points)
     ON DUPLICATE KEY UPDATE points= VALUES(points+$points)

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2018-06-24
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 2011-09-30
    相关资源
    最近更新 更多