2013-12-18 17 views
7

Tôi đang cố gắng để đảm bảo khi tôi chạy truy vấn sau đây chỉ INSERT INTO đầu tiên sẽ làm việc độc đáo .. Tôi biết tôi phải làm slotUNIQUESQLite chính với sự kết hợp của hai cột

Khe có thể là từ 0-5 INTEGER nhưng nó không có nghĩa là chỉ có 6 hàng dữ liệu bảng có thể được chấp nhận vào bảng đó.

Đối với mỗi người chơiHash phù hợp với nó chỉ nên cho phép 6 hàng dữ liệu bảng là slotUNIQUE (không được trùng lặp cùng một cột vị trí, cho mỗi cột của người chơi).

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

Vấn đề tất nhiên là tất cả họ đều vượt qua và gây ra tình trạng trùng lặp

Hiện nay tôi sử dụng DDL bảng này

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

Trả lời

23

Thêm vào DDL bạn

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

Các công trình lớn chèn bây giờ đầu tiên vượt qua chèn tiếp theo cho tôi. lỗi 'Lỗi khi thực hiện truy vấn: khe cột, playerHash không phải là duy nhất' – SSpoke

+1

Tôi không biết cách liên kết chúng theo cách độc đáo bằng cách sử dụng SQLiteStudio, hóa ra, nó không liên quan gì đến việc chỉnh sửa cột thành duy nhất v.v. bạn chỉ cần tạo một Ràng buộc Bảng với Kiểu duy nhất sau đó chọn hộp kiểm của mỗi cột. – SSpoke

+2

@SSpoke nhớ sử dụng [chèn] thay vì [chèn] –

Các vấn đề liên quan