双重DUPLICATE KEY UPDATE条目错误

时间:2012-02-08 11:26:25

标签: php mysql csv duplicates

我试图上传一个csv文件来更新我的数据库中的表,但也想防止重复。最初只有一个DUPLICATE工作,但当我添加第二个条件时,它不起作用。 我得到了“关键PRIMARY的重复输入'1'”。我怎样才能达到目的。

感谢您的帮助。

$sql = "INSERT INTO biodata (student_number, fname, lname, course_name, level)
        VALUES('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]')
        DUPLICATE KEY UPDATE student_number = student_number
        AND course_name = course_name";

 mysql_query($sql) or die (mysql_error());

2 个答案:

答案 0 :(得分:2)

AND替换为,部分中的逗号UPDATE

使用VALUES()语法来引用传递的值。

此外,您无需更新主键或唯一键(激活ON DUPLICATE KEY UPDATE):

$sql = "
  INSERT into biodata
    (student_number, fname, lname, course_name, level) 
  VALUES
    ('$data[0]', '$data[1]', '$data[2]', '$data[3]', '$data[4]')
  ON DUPLICATE KEY UPDATE 
                      --- student_number = VALUES(student_number),
                      --- removed
      fname = VALUES(fname),
      lname = VALUES(lname),
      course_name = VALUES(course_name),
      level = VALUES(level)
" ;

以上代码的作用:

如果INSERT失败(您已尝试插入此student_number的学生),则会激活UPDATE并更新其他4个字段。

您可以选择要更新的字段。如果您想要更新,例如只更新course_name字段,请保留该行并删除其余内容。

答案 1 :(得分:1)

我认为你误解了这个意思     在DUPLICATE KEY UPDATE 构造。 IT确实定义了何时发生重复密钥的条件,但是如果发生了这样的事件则是解决方案。因此,您可以以某种方式修改密钥,这不会导致重复。 重复项的条件是通过表定义中的索引和(主)键定义的。因此,根据上面的代码,您可以在表定义中的student_number和course_name上添加唯一键。

有关更多参考资料,请查看docu