仅当两列不重复时才插入

时间:2015-01-25 18:18:29

标签: php mysql

DELETE FROM RelationsAuthors WHERE MainId = :MainId AND AuthorId NOT IN (:authorarray)

上述代码将删除authorarry内不存在MainId等于特定值的所有内容。

删除后我想将authoarray的值插入到数据库中,如果它们不存在而没有出现任何错误。

*使用foreach $_POST['AuthorId']

INSERT INTO RelationsAuthors (Id,MainId,AuthorId) VALUES('',:MainId,:AuthorId)

但是我想在我的代码中添加我需要INSERT只有WHERE(MainId =:MainId和AuthorId =:AuthorID)不存在。我怎么能这样做?

1 个答案:

答案 0 :(得分:3)

首先,在两个字段上创建一个唯一索引,这样数据库就可以防止重复:

create unique index idx_RelationsAuthors_MainId_AuthorId on RelationsAuthors(MainId, AuthorId);

如果您有重复项,insert将失败,并显示错误。您可以通过几种方式忽略此错误。我的首选方式是:

INSERT INTO RelationsAuthors (MainId, AuthorId)
     VALUES(:MainId, :AuthorId)
     ON DUPLICATE KEY UPDATE MainId = VALUES(MainId);

这将特别忽略重复键错误,但其他问题仍会产生错误(如果适用)。注意我删除了第一列。我从语法中猜测它是一个自动递增的ID,因此您根本不需要将其包含在insert语句中。