Php 插入时如何检查mysql数据库列中是否存在值
我在mysql数据库中有一个contactnumber列。在contactnumber列中有20000多个条目。现在,当我通过.csv文件上传新的数字时,我不希望数据库中出现重复的数字。 如何在数据库中插入时避免重复数字。 我最初实现的逻辑是将.csv文件中的每个数字与数据库中的每个数字进行检查。 这是可行的,但是上传包含1000个数字的.csv文件需要很多时间Php 插入时如何检查mysql数据库列中是否存在值,php,mysql,sql,csv,Php,Mysql,Sql,Csv,我在mysql数据库中有一个contactnumber列。在contactnumber列中有20000多个条目。现在,当我通过.csv文件上传新的数字时,我不希望数据库中出现重复的数字。 如何在数据库中插入时避免重复数字。 我最初实现的逻辑是将.csv文件中的每个数字与数据库中的每个数字进行检查。 这是可行的,但是上传包含1000个数字的.csv文件需要很多时间 请建议如何在不上载重复值的情况下尽可能减少上载.csv文件所需的时间 只需在contactnumber列中添加一个UNIQUE约束:
请建议如何在不上载重复值的情况下尽可能减少上载.csv文件所需的时间 只需在
contactnumber
列中添加一个UNIQUE
约束:
ALTER TABLE `mytable` ADD UNIQUE (`contactnumber`);
从这里,您可以使用IGNORE
选项忽略插入副本时通常显示的错误:
INSERT IGNORE INTO `mytable` VALUES ('0123456789');
或者,您可以使用重复密钥更新上的
对dupe执行一些操作,如本问题所述:只需在contactnumber
列中添加唯一的约束:
ALTER TABLE `mytable` ADD UNIQUE (`contactnumber`);
从这里,您可以使用IGNORE
选项忽略插入副本时通常显示的错误:
INSERT IGNORE INTO `mytable` VALUES ('0123456789');
或者,您可以使用重复密钥更新上的对重复密钥执行操作,如本问题中所述:如果您的联系人号码不应重复,则将其设置为主
或至少设置一个唯一
密钥。这样,当一个值作为副本插入时,插入将自动失败,您无需事先检查。如果您的联系人号码不应重复,则将其设置为主
或至少设置一个唯一
键。这样,当一个值被作为副本插入时,插入将自动失败,您无需事先检查。我的方法是创建一个临时表
create table my_dateasyyyymmddhhiiss as select * from mytable where 1=0;
在那张表中插入内容
然后根据contactnumber查询mytable和temp表之间的孤立项
然后在这两个表之间运行一个内部联接查询,并取出副本以进行电话呼叫器跟踪
最后放下临时表
这个问题没有解决的是提供的文件中的重复项(不知道这是否是这个问题的一个问题)
希望这有助于创建一个临时表
create table my_dateasyyyymmddhhiiss as select * from mytable where 1=0;
在那张表中插入内容
然后根据contactnumber查询mytable和temp表之间的孤立项
然后在这两个表之间运行一个内部联接查询,并取出副本以进行电话呼叫器跟踪
最后放下临时表
这个问题没有解决的是提供的文件中的重复项(不知道这是否是这个问题的一个问题)
如果您不希望在表中插入重复的值,而是希望将该值保留在不同的表中,请希望此帮助
您可以在表上创建触发器。
像这样:
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 ;
若您不希望在表中插入重复的值,而是希望将该值保留在不同的表中
您可以在表上创建触发器。
像这样:
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 ;
我建议这样做
将contactnumber列更改为唯一键
使用phpmyadmin导入.csv文件,并在提交前选中特定于格式的选项下的选项“插入错误时不中止”
我建议这样做
将contactnumber列更改为唯一键
使用phpmyadmin导入.csv文件,并在提交前选中特定于格式的选项下的选项“插入错误时不中止”
我想更新我的问题。。。我还想保留重复值的记录。因为数据库中有telecaller列。所以我想跟踪与电话呼叫器名称相关的重复值。我想更新我的问题。。。我还想保留重复值的记录。因为数据库中有telecaller列。所以我想用相关的telecaller名称跟踪重复的值。你的方式比我的好很多你的方式比我的好很多谢谢Rahul。。谢谢你,拉胡尔。。这很有帮助