2013-03-01 48 views
0

我有如下表:檢查兩個字段的表中沒有重複時,MySQL的INSERT

 table (id, 
      longitude, 
      latitude, 
      longlat, 
      address, 
      description, 
      kind, 
      synonym, 
      primary key(id) 
    ); 

我需要檢查領域longlatdescription中插入一行是獨一無二的,也有與相同組合沒有行longlatdescription它插在它之前。

我該如何修改我的查詢?

 "INSERT INTO yandex_social_objects (longitude,latitude,longlat,address,description,kind,synonym) VALUES (val_1),(val_2),(val_3)...(val_n)" 
+1

可能最容易只需添加一個唯一的密鑰對這些字段的表 – Kickstart 2013-03-01 09:29:34

+0

耶同時創建longlat&說明 – 2013-03-01 09:30:04

+0

但是一個獨特的組合,如果我嘗試插入另一行,其中'longlat'將被複制和「解密」 - 不是?是否插入此行? – Paul 2013-03-01 09:42:37

回答

4

添加UNIQUE約束的結合,使這永遠不會發生:

ALTER TABLE yandex_social_objects 
    ADD CONSTRAINT longlat_description_UQ 
    UNIQUE (longlat, description) ; 

在此之後,所有的插入到表中會檢查這個組合的獨特性,要麼成功,要麼失敗。

對於唯一鍵衝突上的不同行爲,您可以使用INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE ...。檢查這個答案的差異:INSERT IGNORE vs INSERT … ON DUPLICATE KEY UPDATE

+0

我有一個錯誤'指定的鍵太長;最大密鑰長度是767字節'與您的查詢。我做錯了什麼? – Paul 2013-03-01 09:39:32

+0

哦,我想'description'或'longlat'太長了。什麼是數據類型? – 2013-03-01 09:42:15

+0

'longlat'是varcar(128)和'description'是varchar(256) – Paul 2013-03-01 09:44:17