1

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

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

4

5 回答 5

1

只需UNIQUE在列中添加一个约束contactnumber

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

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

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

或者,您可以使用 对ON DUPLICATE KEY UPDATE骗子做一些事情,如以下问题所述:MySQL - 忽略插入错误:重复条目

于 2013-05-17T05:30:45.503 回答
0

如果您contactnumber不应该重复,那么请制作它PRIMARY或至少是一把UNIQUE钥匙。这样,当一个值作为副本插入时,插入将自动失败,您不必事先检查。

于 2013-05-17T05:31:52.880 回答
0

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

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

将您的插入到该表中。

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

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

最后删除临时表。

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

希望这有帮助

于 2013-05-17T05:57:33.213 回答
0

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

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

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 ;
于 2013-05-17T06:17:03.197 回答
0

我会推荐这种方式

  1. 将联系人号码列更改为 UNIQUE KEY

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

于 2013-05-17T06:33:52.930 回答