2011-05-06 32 views
2

當您使字段唯一時,它只能插入一次。有沒有辦法讓兩個字段在一起使用時是唯一的,還是有一種SQL語法可以讓我做到這一點?SQL:防止兩次插入項目的組合

我有一個userID和一個itemNr。用戶可以根據自己的需要選擇儘可能多的項目編號,並且只需插入即可。這意味着我無法將它們設置爲UNIQUE。

但是,我想防止相同的組合在數據庫中兩次。

我知道如何以編程方式執行它(先選擇一個項目,然後檢查它是否與要插入的項目匹配,如果是,則更新它)。

使用直接SQL語法是否有更優雅的方法?我使用MySQL。

回答

4

您可以用複合唯一約束做到這一點:

alter table your_table 
    add constraint your_unique_key unique (col1, col2) 
/
+0

謝謝,完美的作品。我知道有一個更優雅的方式來做到這一點。 – 2011-05-06 17:05:34

1

不是簡單地將每一列定義爲唯一的(將每一列設置爲獨立唯一),而是聲明一個「化合物唯一鍵」,其中兩個或多個列值的組合必須在表的所有行中唯一。基本語法是:

ALTER myTable ADD CONSTRAINT myTable_Unique_ColumnA_ColumnB UNIQUE (ColumnA, ColumnB) 
+0

我相信沒有'對於ALTER TABLE NONCLUSTERED'修改MySQL中 – 2011-05-06 16:55:24

0

這是通過獨特的約束完成的。例如,如果您的表名爲table1,則可以這樣做:

alter table table1 add constraint c1 unique(userID,itemNr);

+0

感謝您的幫助奧拉夫。 – 2011-05-06 17:06:03