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

标签 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

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '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 服务器上运行。

最佳答案

语法 IS NOT NULL 列 是错误的。正确: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)";

关于mysql - 在 MySQL 中使用 IF() 和 ON DUPLICATE KEY UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355798/

相关文章:

mysql - 将 MS SQL 存储过程移植到 MySQL

MySQL 输出屏蔽(即电话号码、SSN 等显示格式)

java - Java中的多个爬虫数据库连接

php - 如何为搜索查询设置配额并避免分页占用配额

php - SQL 查询 - 选择 count(*) 时返回 0

mysql - YA MySQL Error #1064 in CALL

mysql - 如何将.doc导入MySQL

php - 通过php向数据库添加用户时SQL语法错误

php - MySQL 错误 #1064 - 你的 SQL 语法有错误;

java - JSP for 循环与数据库结果