2013-12-18 58 views
7

我想確保當我運行下面的查詢只有第一INSERT INTO將工作的結合。我知道我必須作出slotUNIQUESQLite的唯一鍵有兩列

插槽可以從0-5 INTEGER,但這並不意味着只有6個表數據行可以被接受到該表中。

對於每個與它相匹配的playerHash,應該只允許6個表格數據行爲slotUNIQUE(對於每個playerHash列不能有同一個slot列的重複)。

//Below Query Should Pass 
INSERT INTO Buying(itemId, amount, price, bought, slot, playerHash) VALUES (1, 1, 1, 1, 1, 1); 
//Below Query Should Fail 
INSERT INTO Buying(itemId, amount, price, bought, slot, playerHash) VALUES (1, 1, 1, 1, 1, 1); 
//Below Query Should Pass 
INSERT INTO Buying(itemId, amount, price, bought, slot, playerHash) VALUES (1, 1, 1, 1, 1, 2); 
//Below Query Should Fail 
INSERT INTO Buying(itemId, amount, price, bought, slot, playerHash) VALUES (1, 1, 1, 1, 1, 2); 
//Below Query Should Pass 
INSERT INTO Buying(itemId, amount, price, bought, slot, playerHash) VALUES (1, 1, 1, 1, 0, 2); 

問題當然是,他們全部通過,並導致重複條目

目前我使用這個表的DDL

CREATE TABLE Buying ( 
    id   INTEGER PRIMARY KEY AUTOINCREMENT, 
    itemId  INTEGER NOT NULL, 
    amount  INTEGER NOT NULL, 
    price  INTEGER NOT NULL, 
    bought  INTEGER NOT NULL, 
    collected INTEGER NOT NULL 
         DEFAULT (0), 
    overpaid INTEGER NOT NULL 
         DEFAULT (0), 
    slot  INTEGER NOT NULL, 
    aborted BOOLEAN NOT NULL 
         DEFAULT (0), 
    playerHash INTEGER NOT NULL 
); 

回答

23

添加到您的DDL

create table ... (... 
..., 
unique(slot, player)); 
+0

偉大的作品,現在第一次插入通過下一個插入給我。錯誤 '執行查詢時出錯:列插槽,播放器哈希不是唯一的' – SSpoke

+1

我不知道如何使用SQLiteStudio以獨特的方式將它們連接起來,事實證明,它與編輯列到唯一等無關。你只需創建一個帶有Type Unique的表約束,然後選中每個列的複選框。 – SSpoke

+2

@SSpoke記得使用[insertorthrow]代替[insert] –