在MySQL中使用IF()和ON DUPLICATE KEY UPDATE

时间:2012-04-27 15:09:26

标签: mysql mysql-error-1064

我有一个运行MySQL查询的PHP脚本。

$query = "INSERT INTO table (col1, col2)
          VALUES('$val1', '$val2')
          ON DUPLICATE KEY UPDATE col2= IF(IS NOT NULL '$val1', 'test', 'col2)";

以下是我要做的事情: Col1是主键。如果存在重复,则检查col2的插入值是否为空。如果没有,它将使用值更新,否则值将保持不变。

此插入失败。当我尝试在sqlyog中手动运行它(插入实际值代替变量)时,我收到以下错误: 错误代码:1064

  

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在'IS NOT NULL .....'

附近使用正确的语法

我已经检查了MySQL参考手册中的IS NOT NULL比较运算符(http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html#operator_is-not-null),还检查了INSERT ... ON DUPLICATE KEY UPDATE语法(http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html)并相信我正在使用两者都是正确的,但显然事实并非如此。

我做错了什么?

作为参考,我使用的是MySQL 5,并且该脚本在RHEL5服务器上运行。

1 个答案:

答案 0 :(得分:21)

语法IS NOT NULL column错误。正确:column IS NOT NULL。我不确定这是'test'是什么。您说要更新列或保持原样。

$query = "INSERT INTO table (col1, col2)
          VALUES('$val1', '$val2')
          ON DUPLICATE KEY UPDATE col2 = IF('$val2' IS NOT NULL, '$val2', col2)";

也可以写成:

$query = "INSERT INTO table (col1, col2)
          VALUES('$val1', '$val2')
          ON DUPLICATE KEY UPDATE 
            col2 = COALESCE( VALUES(col2), col2)";