MySQL – 忽略插入错误:重复的条目

我正在使用PHP。

请问在DB中插入新logging的方法是什么? 我在一批中插入大量的logging,我只是想要插入新的logging,我不希望任何重复条目的错误。

是否只有这样的方法才能首先进行SELECT并查看INSERT之前的条目是否已经存在?并且只有当SELECT返回没有logging时才允许INSERT? 我希望不是。

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

谢谢

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

如果您想使用相同的密钥覆盖旧logging,则可以使用REPLACE INTO语法。

或者,您可以使用INSERT … ON DUPLICATE KEY UPDATE语法,如果您想要执行logging更新而不是遇到重复时。

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

例子

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

 REPLACE INTO tbl VALUES(1,50); 

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

 INSERT IGNORE INTO tbl VALUES (1,10); 

该操作执行成功,但没有插入。 你仍然有id = 1和值= 50。 最后:

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

您现在有一个id = 1和值= 200的logging。

你可以使用触发器 。

另外检查这个介绍指南触发器 。

尝试创build一个重复的表,最好是一个临时表,没有唯一的约束,并做你的批量加载到该表中。 然后从临时表中只select唯一的(DISTINCT)项并插入到目标表中。

数据库模式是什么样的?

您可以添加一个ID列,它将自动为每个插入增量 ,以保证唯一的行。

问题:我正在和客户build立一个数据库。 我知道你使用“insert”语句在数据库中插入信息,但是如何确保我不再input相同的客户端信息呢?

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

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

 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); 

这个语句用一个子select插入多个logging。

如果你想插入一条logging,你可以使用下面的语句:

 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); 

双表的使用允许您在select语句中input值,即使这些值当前没有存储在表中。

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

 $duplicate_query=mysql_query("SELECT * FROM student") or die(mysql_error()); $duplicate=mysql_num_rows($duplicate_query); if($duplicate==0) { while($value=mysql_fetch_array($duplicate_query) { if(($value['name']==$name)&& ($value['email']==$email)&& ($value['mobile']==$mobile)&& ($value['resume']==$resume)) { echo $query="INSERT INTO student(name,email,mobile,resume)VALUES('$name','$email','$mobile','$resume')"; $res=mysql_query($query); if($query) { echo "Success"; } else { echo "Error"; } else { echo "Duplicate Entry"; } } } } else { echo "Records Already Exixts"; } 
 INSERT INTO tbl (col1,col2) SELECT val1,val2 FROM tbl WHERE (SELECT COUNT(*) FROM tbl WHERE col1 = val1 AND col2 = val2) = 0 LIMIT 1,1