首页 文章

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

提问于
浏览
65

我在PHP工作 .

请问将新记录插入到具有唯一字段的DB中的正确方法是什么 . 我正在批量插入大量记录,我只想插入新的记录,我不希望重复条目有任何错误 .

有没有办法首先进行SELECT并查看INSERT之前是否已经存在该条目 - 并且只有当SELECT不返回记录时才进行INSERT?我希望不是 .

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

谢谢

7 回答

  • -6

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

    如果要使用具有相同键的新记录覆盖旧记录,则可以使用REPLACE INTO语法 .

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

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

    例子

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

    REPLACE INTO tbl VALUES(1,50);
    

    您仍然有一条记录,id = 1 value = 50 . 请注意,整个记录首先是DELETED,然后重新插入 . 然后:

    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的记录 .

  • -1

    你可以使用triggers .

    另请检查this introduction guide to triggers .

  • -1

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

  • -2

    数据库架构是什么样的?

    您可以为每个插入添加一个ID列auto increment,以保证唯一的行 .

  • -1

    问题:我正在与客户 Build 数据库 . 我知道您使用“insert”语句在数据库中插入信息,但是如何确保不再输入相同的客户端信息?

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

    例如,如果您有一个名为clients的表,其主键为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

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

相关问题