插入时如何检查mysql数据库列中是否存在值

时间:2013-05-17 05:29:22

标签: php mysql sql csv

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

请提示如何在不上传重复值的情况下最小化上传.csv文件所需的时间。

5 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

将您的插入插入该表。

然后根据contactnumber

查询mytable和temp表之间的孤儿

然后在两个表之间运行内部联接查询,并为您的telecaller跟踪提取副本。

最后放下临时表。

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

希望这个帮助

答案 3 :(得分: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 ;

答案 4 :(得分:0)

我会这样推荐

  1. 将contactnumber列更改为UNIQUE KEY

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