2012-01-20 124 views
2

我知道,你可以創建在你的MySQL表中的唯一列,但實際上,我看比較兩列。多列重複項檢查MySQL的

所以,如果我有過記載:

Time   User  Table 
10:00pm  Fred  29 
11:00am  Bob  33 

我可以插入與time 10:00pmtable 33但不10:00pm table 29的新紀錄。

我知道我可以運行一個查詢,然後取消插入新記錄的能力,如果我根據比較這兩個字段的查詢結果,但我想知道是否有更優雅的解決方案,我可以在INSERT上從MySQL獲取重複的輸入錯誤並保存自己的幾行代碼。

+2

你基本上是尋找一個多列約束。 – cdeszaq

+1

我希望我2小時前知道這些詞。我GOOGLE了這一點,並得出了這個網站上的確切結論。至少像我這樣還沒有想出來的人現在會有一個匹配的查詢。 –

回答

3

您可以創建一個包含兩列的唯一索引:

CREATE UNIQUE INDEX idx_time_and_table ON reservations (`Time`, `Table`); 

這將阻止提供兩個值相同的配對任何插入不NULL。有一個NULL價值側步驟獨特的檢查。

您還使用保留的SQL關鍵字,你可能想改變你的列名。

+2

我的sql關鍵字在這個問題上發生了變化,以保護無辜者。 –

3

嘗試使用跨兩列的複合唯一約束:

ALTER TABLE your_table ADD UNIQUE(`Time`, `Table`); 

現在試圖添加具有匹配值將強制MySQL拋出一個錯誤,你可以在你的應用程序測試任何行。

2

創建基於你想成爲唯一的列的唯一索引:

CREATE UNIQUE INDEX index_name ON table_name (column1, column2,...);