【问题标题】:how to check whether value exists or not in mysql database column while inserting插入时如何检查mysql数据库列中是否存在值
【发布时间】:2013-05-12 04:59:16
【问题描述】:

我在 mysql 数据库中有一个联系人号码列。在contactnumber 列中有超过20,000 个条目。现在,当我通过 .csv 文件上传新号码时,我不想在数据库中出现重复的号码。 插入数据库时​​如何避免重复数字。 我最初实现了将 .csv 文件中的每个数字与数据库中的每个数字进行检查的逻辑。 这可行,但需要花费大量时间来上传包含 1000 个数字的 .csv 文件。

请建议如何在不上传重复值的情况下最大限度地减少上传 .csv 文件所需的时间。

【问题讨论】:

    标签: php mysql sql csv


    【解决方案1】:

    只需将UNIQUE 约束添加到contactnumber 列:

    ALTER TABLE `mytable` ADD UNIQUE (`contactnumber`);
    

    从那里您可以使用IGNORE 选项忽略插入副本时通常会显示的错误:

    INSERT IGNORE INTO `mytable` VALUES ('0123456789');
    

    或者,您可以使用ON DUPLICATE KEY UPDATE 对受骗者做一些事情,如以下问题所述:MySQL - ignore insert error: duplicate entry

    【讨论】:

    • 你的方法比我的好很多
    【解决方案2】:

    如果您的contactnumber 不应重复,则将其设置为PRIMARY 或至少一个UNIQUE 键。这样,当一个值作为副本插入时,插入将自动失败,您不必事先检查。

    【讨论】:

    • 我想更新我的问题...我还想记录重复值。因为数据库中有电话呼叫者列。所以我想跟踪具有关联电话呼叫者姓名的重复值。
    【解决方案3】:

    我这样做的方法是创建一个临时表。

     create table my_dateasyyyymmddhhiiss as select * from mytable where 1=0;
    

    在该表中插入。

    然后根据contactnumber查询出mytable和temp表之间的orphans

    然后在两个表之间运行内部连接查询,并取出副本以进行电话呼叫者跟踪。

    最后删除临时表。

    这里没有解决的是提供的文件中的重复项(不知道这是否会成为这个问题的问题)

    希望有帮助

    【讨论】:

      【解决方案4】:

      如果您不想在表中插入重复值,而是希望将该值保留在不同的表中。

      您可以在表上创建触发器。 像这样:

      DELIMITER $$
      CREATE TRIGGER unique_key BEFORE INSERT ON table1
      FOR EACH ROW BEGIN
        DECLARE c INT;
        SELECT COUNT(*) INTO c FROM table1 WHERE itemid = NEW.itemid;
        IF (c > 0) THEN
          insert into table2 (column_name) values (NEW.itemid);
        END IF;
      END$$
      
      DELIMITER ;
      

      【讨论】:

        【解决方案5】:

        我会推荐这种方式

        1. 将联系人号码列更改为唯一键

        2. 使用 phpmyadmin 导入 .csv 文件并在提交前选中“格式特定选项”下的“不要因插入错误中止”选项

        【讨论】:

        • 谢谢你,Rahul.. 它帮助很大
        猜你喜欢
        • 1970-01-01
        • 2012-07-02
        • 2013-04-12
        • 1970-01-01
        • 2010-10-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多