2013-12-18 12 views
7

Staram się upewnić, kiedy uruchomić następujące zapytanie tylko pierwszy INSERT INTO będzie działać .. wiem, że muszę zrobić slotUNIQUESQLite unikalny klucz z kombinacją dwóch kolumnach

Szczelina może być z 0-5 INTEGER, ale nie oznacza to, że tylko 6 wierszy danych tabeli może zostać zaakceptowanych w tej tabeli.

Dla każdego playerHash, który je pasuje, powinno być dozwolone tylko 6 wierszy danych tabeli jako slot jest UNIQUE (nie może mieć duplikatu tej samej kolumny szczeliny, dla każdej kolumny playerHash).

//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); 

Problem oczywiście jest to, że wszyscy przechodzą i spowodować zduplikowane wpisy

Obecnie używam tej tabeli 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 
); 

Odpowiedz

23

Dodaj do ddl

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

działa świetnie teraz najpierw włożyć przechodzi kolejna wkładka daje mi. error 'Błąd podczas wykonywania zapytania: pole kolumn, playerHash nie są unikalne' – SSpoke

+1

Nie wiedziałem, jak połączyć je w unikalny sposób za pomocą SQLiteStudio, okazuje się, nie ma nic wspólnego z edycją kolumn z unikatowymi itp. po prostu musieliście stworzyć Wiązanie Tablicy z Typem Unikatowym, a następnie zaznaczyć pole wyboru dla każdej kolumny. – SSpoke

+2

@Sspoke Pamiętaj, aby użyć [insertorthrow] zamiast [insert] –

Powiązane problemy