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

我在 PHP 工作。

请告诉我在数据库中插入新记录的正确方法是什么,因为数据库有唯一的字段。 我在一批中插入了很多记录,我只是想插入新的记录,我不希望重复的条目有任何错误。

是否只有先创建一个 SELECT 并查看条目是否在 INSERT 之前已经存在——并且只有当 SELECT 不返回任何记录时才进行 INSERT?希望不是。

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

谢谢你

144228 次浏览

你可以使用 触发器

也检查 触发器入门指南

尝试创建一个没有惟一约束的重复表(最好是临时表) ,并将批量加载到该表中。然后从临时表中仅选择惟一(DISTINCT)项并插入到目标表中。

可以通过使用 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);

此语句使用子选择插入多条记录。

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

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 语句中输入值,即使这些值当前没有存储在表中。

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

如果希望在有重复记录时不采取任何操作,可以使用 插入... 忽略语法。

如果希望用具有相同键的新记录覆盖旧记录,可以使用 换成语法。

或者,如果希望在遇到重复记录时对记录执行更新,则可以使用 在重复的密钥更新中插入..语法。

编辑: 我想我应该加一些例子。

例子

假设您有一个名为 tbl的表,其中有两列: idvalue。有一个条目,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和 value = 200的记录。

$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";
}