2014-06-18 57 views
0

我在想如何創建一個不允許插入完整重複項的行的表。完成我的意思是每個值都必須相同。SQLite 3防止所有值都重複的行

我很喜歡插入與1列值不同的行,但如果它們全都相同,則不行。

我知道你可以使用INSERT OR IGNORE來避免插入重複的行,但問題是我的表使用自動遞增的整數作爲它的主鍵,並且INSERT OR IGNORE仍然允許重複的行被插入自動遞增的ID不同

Ex。

運行

INSERT OR IGNORE INTO table VALUES ("A", "B" "C"); 

兩次將下表給我:

id | Column A | Column B | Column C 
1. "A"   "B"  "C" 
2. "A"   "B"  "C" 

有沒有解決這個其他任何方式比重複手動搜索行(忽略ID)?

+1

放於一個獨特的密鑰,涵蓋所有在表中的相關字段。例如'唯一鍵'foo'(a,b,c)' –

回答

1

INSERT或忽略將檢查任何約束,所以只需添加一個你要檢查的字段:

CREATE TABLE MyTable(
    ColumnA INTEGER PRIMARY KEY, 
    ColumnB WHATEVER, 
    ColumnC, 
    UNIQUE (ColumnA, ColumnB, ColumnC) 
); 
+0

是的,但正如我所說的,我仍然希望能夠添加具有相同列的列的功能。所以(A,B,C)和(A,D,C)應該仍然可以工作,(A,B,C)(X,Y,C)等等。 如果我聲明AB和C是唯一的,不會忽略其中A或B或C相同的插入項嗎? – pledgehollywood

+0

這個約束完成你想要的。 –

+0

完美運作。我想我對UNIQUE的理解是不正確的如果我做了:Unique(ColumnA),Unique(ColumnB),Unique(ColumnC)。是否會檢查以確保每一列都是獨一無二的? – pledgehollywood