首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL -忽略插入错误:重复条目

MySQL -忽略插入错误:重复条目
EN

Stack Overflow用户
提问于 2009-05-01 17:48:06
回答 5查看 138.7K关注 0票数 80

我在PHP中工作。

请选择合适的方式将新记录插入到数据库中,该数据库具有唯一字段。我正在批量插入许多记录,我只希望插入新的记录,并且不希望重复的条目出现任何错误。

是否只有在SELECT没有返回任何记录的情况下,才能先进行SELECT操作并查看条目是否已经存在于INSERT之前?我真希望不是这样。

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

谢谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-05-01 17:54:44

如果您不想在存在重复记录时执行任何操作,则可以使用INSERT... IGNORE语法。

如果您想用具有相同键的新记录覆盖旧记录,可以使用REPLACE INTO语法。

或者,如果您希望在遇到重复项时对记录执行更新,则可以使用INSERT... ON DUPLICATE KEY UPDATE语法。

编辑:我想添加一些示例。

示例

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

代码语言:javascript
复制
REPLACE INTO tbl VALUES(1,50);

你还有一张记录,是id=1 value=50。请注意,整个记录首先被删除,然后重新插入。然后:

代码语言:javascript
复制
INSERT IGNORE INTO tbl VALUES (1,10);

操作成功执行,但未插入任何内容。你还有id=1和value=50。最后:

代码语言:javascript
复制
INSERT INTO tbl VALUES (1,200) ON DUPLICATE KEY UPDATE value=200;

您现在只有一条包含id=1和value=200的记录。

票数 176
EN

Stack Overflow用户

发布于 2009-05-01 17:52:11

您可以使用EXISTS条件确保不插入重复信息。

例如,如果您有一个名为clients的表,其主键为client_id,则可以使用以下语句:

代码语言:javascript
复制
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);

此语句使用subselect插入多个记录。

如果要插入单个记录,可以使用以下语句:

代码语言:javascript
复制
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);

使用dual表允许您在select语句中输入值,即使这些值当前未存储在表中。

来自http://www.techonthenet.com/sql/insert.php

票数 -1
EN

Stack Overflow用户

发布于 2009-05-01 17:50:19

您可以使用triggers

还要检查this introduction guide to triggers

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/812437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档