2009-08-23 74 views
1

我有一個數據庫,我需要避免插入重複。的要求是:SQL獨特的和插入的設置約束

對於行匹配第1列的子集,不能有任何具有匹配第1列具有相同的列2.

對於行的子集,不能有任何具有相同的列3和4

我是新來的SQL所以是有,當我創建數據庫(創建表)或做我必須做一個選擇之前手動完成這些檢查設置這些關係的一種方式插入表中?

回答

4

實際上,您需要第1列和第2列是唯一的,第1,3和第4列也是唯一的。所以當你創建表格時,你可以使用兩個UNIQUE constaints:

CREATE TABLE tbl (
    col1 varchar(255), 
    col2 varchar(255), 
    col3 varchar(255), 
    col4 varchar(255), 
    CONSTRAINT uc_first UNIQUE(col1, col2), 
    CONSTRAINT uc_second UNIQUE(col1, col3, col4) 
) 
+0

謝謝。有一兩件事,有沒有辦法知道哪些約束SQLite中被觸發?谷歌顯示了一些人抱怨說他們需要做字符串比較(.IsSameAs( 「SQLITE_CONSTRAINT [19]:第1列,3,4,是不是唯一的」))。似乎klunky。 – max 2009-08-23 11:16:27

0

只是爲了讓球滾動...

你能馬上回去插入後的基礎上刪除您提到的約束上重複的行?

+0

呃......要對它有禮貌。是的你可以;但不,這樣做效率會非常低下。 – 2009-08-23 11:09:44

+0

夠公平的。我從Todd Owen的回答中瞭解到,在創建表時,CONSTRAINT是必需的。我想它可以在創建後更改。回到手冊... – pavium 2009-08-23 13:11:55