1

如果没有“名称”和“电子邮件”同时存在的条目,我只想插入。

因此,如果“名称”存在于不同的电子邮件中,反之亦然。

mysql_query("INSERT INTO 
             list (name,email) 
             VALUES ('$name','$email') 
             ON DUPLICATE KEY 
             UPDATE name='$name',email='$email'");

我已经创建了 name 和 email 主键,但是 ON DUPLICATE 语句没有效果。

4

2 回答 2

1

如果 name 和 email 是您的组合唯一键,则如果数据集已存在,则触发更新语句(使用完全相同的值覆盖)是没有意义的。在这种情况下,我真的只会插入然后检查数据库是否以违反键约束的方式响应。这是随后被忽略的预期错误。其他任何事情仍然是错误。

我不会用这个 NO-OP 更新来保持沉默。

于 2012-12-19T02:00:37.210 回答
0

您需要有一个复合唯一键才能ON DUPLICATE KEY UPDATE工作:

CREATE UNIQUE INDEX name_email ON list (name, email);

这就是为什么它叫ON DUPLICATE **KEY** UPDATE

于 2012-12-19T01:57:21.457 回答