我在 mysql 数据库中有一个联系人号码列。在contactnumber 列中有超过20,000 个条目。现在,当我通过 .csv 文件上传新号码时,我不想在数据库中出现重复的号码。插入数据库时如何避免重复数字。我最初实现了将 .csv 文件中的每个数字与数据库中的每个数字进行检查的逻辑。这可行,但需要花费大量时间来上传包含 1000 个数字的 .csv 文件。
请建议如何在不上传重复值的情况下最大限度地减少上传 .csv 文件所需的时间。
只需UNIQUE
在列中添加一个约束contactnumber
:
ALTER TABLE `mytable` ADD UNIQUE (`contactnumber`);
从那里您可以使用该IGNORE
选项忽略插入副本时通常会显示的错误:
INSERT IGNORE INTO `mytable` VALUES ('0123456789');
或者,您可以使用 对ON DUPLICATE KEY UPDATE
骗子做一些事情,如以下问题所述:MySQL - 忽略插入错误:重复条目
如果您contactnumber
不应该重复,那么请制作它PRIMARY
或至少是一把UNIQUE
钥匙。这样,当一个值作为副本插入时,插入将自动失败,您不必事先检查。
我这样做的方法是创建一个临时表。
create table my_dateasyyyymmddhhiiss as select * from mytable where 1=0;
将您的插入到该表中。
然后根据contactnumber查询出mytable和temp表之间的orphans
然后在两个表之间运行一个内部连接查询,并取出副本以进行电话呼叫者跟踪。
最后删除临时表。
这没有解决的事情是提供的文件中的重复项(不知道这是否会成为这个问题的问题)
希望这有帮助
如果您不想在表中插入重复值,而是希望将该值保留在不同的表中。
您可以在表上创建触发器。像这样:
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 ;
我会推荐这种方式
将联系人号码列更改为 UNIQUE KEY
使用 phpmyadmin 导入 .csv 文件并在提交前检查“格式特定选项”下的“插入错误时不要中止”选项