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

Php 插入时如何检查mysql数据库列中是否存在值,php,mysql,sql,csv,Php,Mysql,Sql,Csv,我在mysql数据库中有一个contactnumber列。在contactnumber列中有20000多个条目。现在,当我通过.csv文件上传新的数字时,我不希望数据库中出现重复的数字。 如何在数据库中插入时避免重复数字。 我最初实现的逻辑是将.csv文件中的每个数字与数据库中的每个数字进行检查。 这是可行的,但是上传包含1000个数字的.csv文件需要很多时间 请建议如何在不上载重复值的情况下尽可能减少上载.csv文件所需的时间 只需在contactnumber列中添加一个UNIQUE约束:

我在mysql数据库中有一个contactnumber列。在contactnumber列中有20000多个条目。现在,当我通过.csv文件上传新的数字时,我不希望数据库中出现重复的数字。 如何在数据库中插入时避免重复数字。 我最初实现的逻辑是将.csv文件中的每个数字与数据库中的每个数字进行检查。 这是可行的,但是上传包含1000个数字的.csv文件需要很多时间


请建议如何在不上载重复值的情况下尽可能减少上载.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。。谢谢你,拉胡尔。。这很有帮助