[英]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 ;
我會推薦這種方式
將contactnumber列更改為UNIQUE KEY
使用phpmyadmin導入.csv文件,並在提交格式前檢查“格式特定的選項”下的“請勿在插入錯誤時中止”選項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.