Câu trả lời:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Tôi có một bảng MySQL:
CREATE TABLE `content_html` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_box_elements` int(11) DEFAULT NULL,
`id_router` int(11) DEFAULT NULL,
`content` mediumtext COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id_box_elements` (`id_box_elements`,`id_router`)
);
và UNIQUE KEY hoạt động đúng như mong đợi, nó cho phép nhiều hàng NULL của id_box_elements và id_router.
Tôi đang chạy MySQL 5.1.42, vì vậy có lẽ đã có một số cập nhật về vấn đề được thảo luận ở trên. May mắn là nó hoạt động và hy vọng nó sẽ giữ nguyên như vậy.
Các chỉ mục duy nhất nhiều cột không hoạt động trong MySQL nếu bạn có một giá trị NULL liên tiếp vì MySQL coi NULL là một giá trị duy nhất và ít nhất hiện tại không có logic để làm việc xung quanh nó trong các chỉ mục nhiều cột. Vâng, hành vi này là điên rồ, bởi vì nó giới hạn rất nhiều ứng dụng hợp pháp của các chỉ mục nhiều cột, nhưng đó là ... Đó là một lỗi đã được đóng dấu "sẽ không sửa" trên MySQL theo dõi lỗi ...
ENGINE BDB
và, 2) đây là hành vi được ghi lại , mặc dù, IMHO, không được ghi chép quá đủ cho thấy mức độ đáng ngạc nhiên / khó chịu của nó. Xem lỗi MySQL 25544 bug.mysql.com/orms.php?id=25544 để thảo luận.
Bạn đã thử điều này?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` ( user
, email
, address
) `. Tôi đang sử dụng MYSQL phiên bản 5.5.24 Bạn có thể thiết lập điều này ngay cả trong PHPMYADMIN nếu bạn đang sử dụng nó. Tôi đang sử dụng phiên bản 3.5.1 của PMA.
Điều này hoạt động cho phiên bản mysql 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 hoặc cao hơn hoạt động như thế này (Tôi vừa thử nghiệm):
Ví dụ: PRODUCT_NAME, PRODUCT_VERSION 'ly', null 'ly', null 'rượu', 1
Bây giờ nếu bạn cố gắng chèn ('rượu' 1) một lần nữa, nó sẽ báo cáo vi phạm ràng buộc Hy vọng điều này sẽ giúp
Bạn có thể thêm các chỉ mục duy nhất nhiều cột thông qua phpMyAdmin . (Tôi đã thử nghiệm trong phiên bản 4.0.4)
Điều hướng đến trang cấu trúc cho bảng mục tiêu của bạn. Thêm một chỉ mục duy nhất cho một trong các cột. Mở rộng danh sách Chỉ mục ở dưới cùng của trang cấu trúc để xem chỉ mục duy nhất bạn vừa thêm. Nhấp vào biểu tượng chỉnh sửa và trong hộp thoại sau, bạn có thể thêm các cột bổ sung vào chỉ mục duy nhất đó.
Tôi làm như thế này:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
Quy ước của tôi cho một duy nhất index_name
là TableName_Column1_Column2_Column3_uindex
.
Để thêm chỉ mục duy nhất sau đây là bắt buộc:
1) tên_bảng
2 ) tên_bảng
3) mà bạn muốn thêm chỉ mục
ALTER TABLE `tablename`
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);
Trong trường hợp của bạn, chúng tôi có thể tạo chỉ mục duy nhất như sau:
ALTER TABLE `votes`ADD
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
Nếu bạn đang tạo bảng trong mysql thì hãy sử dụng như sau:
create table package_template_mapping (
mapping_id int(10) not null auto_increment ,
template_id int(10) NOT NULL ,
package_id int(10) NOT NULL ,
remark varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
Trước tiên hãy loại bỏ các bản sao hiện có
delete a from votes as a, votes as b where a.id < b.id
and a.user <=> b.user and a.email <=> b.email
and a.address <=> b.address;
Sau đó thêm các ràng buộc duy nhất
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
Xác nhận ràng buộc với
SHOW CREATE TABLE votes;
Lưu ý rằng người dùng, email, địa chỉ sẽ được coi là duy nhất nếu bất kỳ ai trong số họ có giá trị null trong đó.
Đối với PostgreSQL ... Nó không hoạt động với tôi với chỉ mục; nó đã cho tôi một lỗi, vì vậy tôi đã làm điều này:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL đưa ra chỉ mục duy nhất tên riêng của nó. Tôi đoán bạn có thể thay đổi tên của chỉ mục trong các tùy chọn cho bảng, nếu cần phải thay đổi ...