MySQL如何插入新记录或更新字段取决于它是否存在?

时间:2010-01-10 11:10:25

标签: mysql sql sql-update sql-insert

我正在尝试实施一个评级系统,我在db表中保留以下两个字段:

评级(当前评级) num_rates(到目前为止提交的评分数)

UPDATE `mytable`
   SET rating=((rating*num_rates)+$theRating)/num_rates, num_rates=num_rates+1
 WHERE uniqueCol='$uniqueCol'

变量来自我的PHP代码。

所以,基本上有时候DB中不存在带有uniqueCol的行,所以如果存在,我怎么能做上面的语句呢?如果不存在,那么这样做是这样的:

INSERT INTO `mytable`
   SET rating=$theRating, num_rates=1, uniqueCol=$uniqueCol

1 个答案:

答案 0 :(得分:4)

查看INSERT ... ON DUPLICATE KEY UPDATE

看起来应该是这样的:

INSERT INTO mytable (rating, num_rates, uniqueCol)
VALUES ($theRating, 1, $uniqueCol)
ON DUPLICATE KEY UPDATE
  rating=((rating*num_rates)+$theRating)/num_rates,
  num_rates=num_rates+1;

确保UNIQUE index上有PRIMARY KEYuniqueCol