一尘不染

MySQL-忽略插入错误:重复输入

mysql

我正在使用PHP。

请问什么是将新记录插入具有唯一字段的数据库的正确方法。我正在批量插入很多记录,我只想插入新记录,并且我不想重复条目有任何错误。

有没有唯一方法可以首先进行SELECT并查看条目是否在INSERT之前已经存在-并且仅在SELECT不返回任何记录时才插入INSERT?我希望不是。

我想以某种方式告诉MySQL忽略这些插入而没有任何错误。

谢谢


阅读 151

收藏
2020-05-17

共1个答案

一尘不染

如果在重复记录时不采取任何措施,则可以使用INSERT …
IGNORE
语法。

如果要用相同密钥的新记录覆盖旧记录,则可以使用REPLACE
INTO
语法。

或者,如果要对记录执行更新,而在遇到重复记录时可以使用INSERT … ON DUPLICATE KEY
UPDATE
语法。

编辑:以为我会添加一些示例。

例子

假设您有一个tbl由两列id和命名的表value。只有一个条目,id = 1,value = 1。如果运行以下语句:

REPLACE INTO tbl VALUES(1,50);

您仍然有一条记录,id = 1值= 50。请注意,整个记录首先被删除,然后重新插入。然后:

INSERT IGNORE INTO tbl VALUES (1,10);

该操作成功执行,但未插入任何内容。您仍然具有id = 1和value = 50。最后:

INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

现在,您有一条ID为1且值为200的记录。

2020-05-17