2013-12-18 13 views
7

Ich versuche, um sicherzustellen, dass, wenn ich die folgende Abfrage nur die ersten INSERT INTO funktionieren laufen .. Ich weiß, ich slotUNIQUESQLite Eindeutiger Schlüssel mit einer Kombination aus zwei Spalten

Der Schlitz aus könnte machen 0-5 INTEGER, aber es bedeutet nicht, dass nur 6 Tabellendatenzeilen in diese Tabelle akzeptiert werden können.

Für jeden playerHash, der zu ihm passt, sollten nur 6 Tabellendatenzeilen zulässig sein, da slotUNIQUE ist (für jede playerHash-Spalte darf kein Duplikat derselben Slotspalte vorhanden sein).

//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 natürlich ist sie Allpaß und verursachen doppelte Einträge

Derzeit verwende ich diese DDL Tabelle

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

Antwort

23

auf Ihre DDL hinzufügen

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

großen Werke jetzt erste Einsatz Übergibt nächsten Einsatz gibt mir. Fehler 'Fehler beim Ausführen der Abfrage: Spalten Slot, playerHash sind nicht eindeutig' – SSpoke

+1

Ich wusste nicht, wie man sie auf einzigartige Weise mit SQLiteStudio verknüpfen, stellt sich heraus, es hat nichts mit der Bearbeitung von Spalten zu einzigartigen usw. zu tun. Sie mussten nur eine Tabellenbeschränkung mit Type Unique erstellen und dann die Kontrollkästchen für die einzelnen Spalten aktivieren. – SSpoke

+2

@SSpoke erinnern, [introhrow] anstatt [einfügen] zu verwenden –

Verwandte Themen