2010-06-21 32 views
9

Tôi đã nhận thấy rằng nếu tôi có một khóa ký tự duy nhất cho hai cột, column_a và column_b, thì sql của tôi bỏ qua ràng buộc này nếu một cột rỗng.Các khóa phức hợp MySql và các giá trị rỗng

Ví dụ:

nếu column_a = 1 và column_b = null Tôi có thể chèn column_a = 1 và column_b = null càng nhiều càng tốt Tôi thích

nếu column_a = 1 và column_b = 2 Tôi chỉ có thể chèn giá trị này một lần.

Có cách nào để áp dụng ràng buộc này, ngoài việc thay đổi các cột thành Không Null và đặt các giá trị mặc định?

Trả lời

13

http://dev.mysql.com/doc/refman/5.0/en/create-index.html

"Một chỉ số UNIQUE tạo ra một hạn chế sao cho tất cả các giá trị trong chỉ mục phải phân biệt. Một lỗi đã xảy ra nếu bạn cố gắng thêm một hàng mới với một giá trị quan trọng mà phù hợp với một hàng hiện có. Trở ngại này không áp dụng cho các giá trị NULL ngoại trừ cho công cụ lưu trữ BDB. Đối với các công cụ khác, một chỉ mục UNIQUE cho phép nhiều giá trị NULL cho các cột có thể chứa NULL. "

Vì vậy, không, bạn không thể nhận MySQL để coi NULL là giá trị duy nhất. Tôi đoán bạn có một vài lựa chọn: bạn có thể làm những gì bạn đề xuất trong câu hỏi của mình và lưu trữ "giá trị đặc biệt" thay vì null hoặc bạn có thể sử dụng công cụ BDB cho bảng. Mặc dù vậy, tôi không nghĩ rằng sự khác biệt nhỏ này trong các lệnh đảm bảo hành vi làm cho một sự lựa chọn bất thường của công cụ lưu trữ.

+0

Cảm ơn Hammer! vâng, lưu trữ một giá trị đặc biệt sẽ không làm tổn thương quá nhiều và chắc chắn là một lựa chọn tốt hơn cho tôi hơn là thay đổi cơ chế lưu trữ. – stevebot

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