重复的MySQL条件插入

时间:2011-01-04 11:20:15

标签: mysql sql insert

我有一个包含3个字段的示例表,其中adhex是主键。目前我正在使用ASP和记录集,它非常慢,需要转移到PHP和更快的系统。我被推荐INSERT ... ON DUPLICATE KEY UPDATE,效果很好!

但是我希望更新是有条件的,无法解决!

到目前为止,我有以下根本不起作用!

我需要发生的是更新只在值中的mtime是>时才更新reg和mtime。表中的一个。我确信这是一个简单的例子,但即使看一些例子,我也无法解决条件部分。

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg='ZsS-SLD' 
  CASE 
    WHEN mtime < values(mtime) THEN values(mtime) 
  END

2 个答案:

答案 0 :(得分:2)

仔细查看INSERT ... ON DUPLICATE的语法。 ON DUPLICATE KEY UPDATE后出现一系列 = 表达式语句。尝试类似:

INSERT INTO testTable (adhex,reg,mtime) 
VALUES ('00B0BA','reg-1','1294129605') 
ON DUPLICATE KEY UPDATE reg=IF(mtime < VALUES(mtime), 'ZsS-SLD', reg), 
  mtime=IF(mtime < VALUES(mtime), VALUES(mtime), mtime)

答案 1 :(得分:1)

这不是CASE的工作方式。它返回一个值,而不是一段SQL代码。

Insert into testTable (adhex,reg,mtime)
VALUES ('00B0BA','reg-1','1294129605')
ON DUPLICATE KEY UPDATE reg=/*'ZsS-SLD'*/ CASE -- Note the commented out value
    WHEN mtime < values(mtime) THEN values(mtime)
    -- Notice there's not ELSE: you'll get NULL if condition is not matched
END