我在mysql数据库中有一个contactnumber列。在contactnumber列中有超过20,000个条目。现在当我通过.csv文件上传新号码时,我不想在数据库中重复数字。 如何在数据库中插入时避免重复的数字。 我最初实现了逻辑,用数据库中的每个数字检查.csv文件中的每个数字。 这可行,但需要花费大量时间上传包含1000个数字的.csv文件。
请提示如何在不上传重复值的情况下最小化上传.csv文件所需的时间。
答案 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)
我会这样推荐
将contactnumber列更改为UNIQUE KEY
使用phpmyadmin导入.csv文件并在提交之前选中格式特定选项下的“不要中止INSERT错误”选项