2012-05-27 85 views
0

這是我的表與一些樣本數據MySQL的插入,但更新/忽略重複

C ID | D ID | Details | 
-------------------------- 
a | b_data1 | d1  | 
a | b_data2 | d2  | 
b | b_data1 | d1  | 
b | b_data2 | d2  | 
c | b_data1 | d1  | 
c | b_data2 | d2  | 

當我運行此查詢##

INSERT IGNORE INTO table_name (C_ID, D_ID, Details) VALUES ('C', 'b_data3','d3') ('C', 'b_data2','d2')

它插入這兩個行時,它應該忽略第二個值對('C', 'b_data2','d2')

沒有定義索引/主鍵。

我想確保沒有重複的行,意味着三列合併的數據應該使行唯一。我不能讓它變得獨一無二。正如我在這裏已經說明的那樣,a可以保持與b相同的內容,但a不應該有重複。

回答

1

MySQL使用UNIQUE索引強制執行唯一約束。如果你想添加的指標而無需重新創建表,你會怎麼做:

CREATE UNIQUE INDEX index_name ON table (C_ID, D_ID, Details) 

除了INSERT忽略並已經提到REPLACE,您還可以使用INSERT ... ON DUPLICATE KEY更新更多的控制權當插入運行到重複唯一時會發生什麼。例如:

+0

,但我不能讓它獨一無二。我在那裏說明了。 a可以保持與b相同的內容,但a不應該有重複 – Shar678

+0

恐怕,MySql需要主鍵或唯一索引來保留重複項。 –

+0

非常感謝你的幫助.. 我很清楚它的用法..我不能創建獨特的/主鍵。我不得不查詢並做!in_array($ data,$ query_array)來結束這個 – Shar678

2

INSERT IGNORE表示「忽略破壞唯一約束的行,而不是使查詢失敗」。您需要定義UNIQUE列才能按照您的預期工作 - 例如, CREATE TABLE tablename (col1 type, col2 type, col3 type, UNIQUE (col1, col2, col3))

+0

我不能使它唯一,因爲這是一個集合頁面, Eg應該能夠存儲'a> b_data1> d1和a> b_data2> d2'和b'b> b_data1> d1和b> b_data2> d2' 表關於我說明。 a可以具有相同的集合b的內容,但不能在 – Shar678

+0

中具有相同的內容如果定義了'UNIQUE(col1,col2,col3)',這意味着在所有這些列中都不能有相同的值。即,只要「col2」或「col3」不同,你可以在'col1'中獲得相同的值。或者,只要col1不同,你可以在'col2'和'col3'中得到相同的值。它是所有三列的複合索引,並不意味着它們每個都必須是唯一的。 – lanzz

+0

非常感謝你的幫助.. 我現在清楚它的用法..我不能在此表中創建唯一/主鍵,因爲沒有獨特的單個柱。其獨特的時候全部3個組合。我不得不查詢和做!in_array($ data,$ query_array)來結束這個 – Shar678

0

您應該按照建議的@lanzz定義組合的唯一索引。如果您希望新記錄在索引衝突的情況下替換舊記錄,請使用replace聲明。

+0

,但我不能讓它獨一無二。我在那裏說明了。 a可以保持與b相同的內容,但a不應該有重複的 – Shar678