2013-12-18 14 views
7

che sto cercando di fare in modo quando si esegue la seguente query solo il primo INSERT INTO funzionerà .. So che devo fare slotUNIQUESQLite chiave univoca con una combinazione di due colonne

Lo slot potrebbe essere da 0-5 INTEGER ma ciò non significa che solo 6 righe di dati di tabella possano essere accettate in quella tabella.

Per ciascun playerHash che corrisponde deve consentire solo 6 righe di dati di tabella come slot è UNIQUE (non può avere duplicato della stessa colonna di slot, per ogni colonna 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); 

problema, naturalmente, è che tutto passa e causare voci duplicate

Attualmente io uso questa tabella 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 
); 

risposta

23

Aggiungi al ddl

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

Opere grande ora primo inserto passa il prossimo inserimento mi dà. errore 'Errore durante l'esecuzione della query: slot colonne, playerHash non è univoco' – SSpoke

+1

Non sapevo come collegarli in un modo unico usando SQLiteStudio, risulta, non ha nulla a che fare con la modifica delle colonne su univoco ecc .. hai appena dovuto creare un vincolo di tabella con Type Unique, quindi hai selezionato la casella di controllo di ogni colonna. – SSpoke

+2

@SSpoke ricorda di usare [insertorthrow] invece di [inserire] –

Problemi correlati