我试图上传一个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());
答案 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。