2012-07-03 41 views
6

Tôi có một bảng MyISAM MySQL có ISBN. Tôi muốn tạo ra một chỉ số UNIQUE mà sẽ không ném lỗi "trùng lặp" nếu giá trị rỗng hoặc không.mysql unique index EXCEPT rỗng hoặc null

Điều này có khả thi không?

Trả lời

2

Vì bạn đang sử dụng công cụ lưu trữ MyISAM (hoặc INNODB), câu trả lời ngắn gọn là không. Nhiều chuỗi rỗng sẽ không hoạt động đối với ràng buộc chỉ mục duy nhất, mặc dù nhiều null sẽ. Đặt cược tốt nhất của bạn nếu bạn muốn một giải pháp chỉ SQL, là tạo một chỉ mục thông thường trên trường ISBN, và sau đó sử dụng một thủ tục được lưu trữ để hoạt động như một proxy chèn - một kiểm tra tính duy nhất nếu không rỗng hoặc rỗng.

Nếu chỉ null công việc cho bạn, đây là một cơ bản tạo:

CREATE TABLE `books` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `isbn` int(13) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `isbn` (`isbn`) 
) 

Chỉ cần một lưu ý ... Hãy nhớ rằng các '13' quy định cho int chỉ là số chữ số nó sẽ hiển thị khi trở về trong một truy vấn, không phải kích thước của số nguyên.

+1

Tôi ổn với việc có NULL. để thiết lập điều này, tôi chỉ cần đặt INT (13) DEFAULT NULL và điều đó sẽ hoạt động? – nick

+1

@nick Có, hãy xem câu lệnh tạo của tôi mà tôi đã thêm vào trong câu hỏi ở trên, bạn có thể sử dụng nó trong ALTER TABLE. – Ray

3

bạn có thể sử dụng một cái gì đó như thế này,

ALTER TABLE tbl_name ADD INDEX_NAME UNIQUE (column_list):

Lệnh này tạo một chỉ số mà giá trị phải là duy nhất (ngoại trừ các giá trị NULL, mà có thể xuất hiện nhiều lần). Tham khảo MySQL INDEXES.

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