2010-01-13 30 views
6

Vì vậy, tôi có bảng này với khóa tổng hợp, về cơ bản 'userID' - 'dữ liệu' phải là duy nhất (xem câu hỏi khác của tôi SQL table - semi-unique row?)Phím tổng hợp có điều kiện trong MySQL?

Tuy nhiên, tôi đã tự hỏi liệu có thể thực hiện điều này chỉ có hiệu lực khi userID không phải là số không? Ý tôi là, 'userID' - 'dữ liệu' phải là duy nhất cho các userID khác không?

Hoặc tôi có đang sủa nhầm cây không?

Cảm ơn
Mala

Trả lời

5

chế SQL áp dụng cho mỗi hàng trong bảng. Bạn không thể làm cho chúng có điều kiện dựa trên các giá trị dữ liệu nhất định.

Tuy nhiên, nếu bạn có thể sử dụng NULL thay vì bằng không, bạn có thể khắc phục ràng buộc duy nhất. Ràng buộc duy nhất cho phép nhiều mục nhập có NULL. Lý do là tính duy nhất có nghĩa là không có hai số giá trị bằng nhau có thể tồn tại. Bình đẳng nghĩa là value1 = value2 phải đúng. Nhưng trong SQL, NULL = NULLkhông rõ, không đúng sự thật.

CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64)); 

INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo'); 
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 

Cho đến nay rất tốt, bây giờ bạn có thể nghĩ rằng những điều khoản sau đây sẽ vi phạm các hạn chế duy nhất, nhưng họ không:

INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 
+0

tuyệt vời, cảm ơn! Như tôi đã nói tôi đã sử dụng một giải pháp khác, nhưng bạn đã cho tôi một câu trả lời hoàn hảo cho câu hỏi của tôi và tôi chắc chắn sẽ sử dụng nó trong tương lai =) – Mala

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