簡體   English   中英

如何在插入時檢查mysql數據庫列中是否存在值

[英]how to check whether value exists or not in mysql database column while inserting

我在mysql數據庫中有一個contactnumber列。 在contactnumber列中,有20,000多個條目。 現在,當我通過.csv文件上傳新數字時,我不希望數據庫中出現重復的數字。 如何在插入數據庫時​​避免重復的數字。 最初,我實現了將.csv文件中的每個數字與數據庫中的每個數字進行檢查的邏輯。 此方法有效,但需要花費大量時間來上載包含1000個數字的.csv文件。

Pleae建議如何在不上傳重復值的情況下最大程度地縮短上傳.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表之間的孤兒

然后在兩個表之間運行內部聯接查詢,並提取重復記錄以進行電話呼叫者跟蹤。

最終刪除臨時表。

無法解決的問題是所提供文件中的重復項(不知道這是否會成為此問題中的問題)

希望這個幫助

如果您不想在表中插入重復的值,而是希望將該值保留在其他表中。

您可以在表上創建觸發器。 像這樣:

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 ;

我會推薦這種方式

  1. 將contactnumber列更改為UNIQUE KEY

  2. 使用phpmyadmin導入.csv文件,並在提交格式前檢查“格式特定的選項”下的“請勿在插入錯誤時中止”選項

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM