我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户,电子邮件,地址唯一(一起)。
如何在MySql中做到这一点?
当然这个例子只是…一个例子。所以请不要担心语义。
当前回答
你试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
其他回答
MySql 5或更高版本的行为是这样的(我刚刚测试过):
您可以定义包含可空列的唯一约束。假设你定义了一个唯一的约束(a, B),其中a不是可空的,但B是 当计算这样的约束时,你可以有(a, null)任意多次你想要的(相同的a值!) 你只能有一个(A,不是空B)对
例子: PRODUCT_NAME, PRODUCT_VERSION “玻璃”,null “玻璃”,null “酒”,1
现在,如果您尝试再次插入('wine' 1),它将报告违反约束 希望这能有所帮助
我有一个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 `my_uniq_id` (`id_box_elements`,`id_router`)
);
UNIQUE KEY就像预期的那样工作,它允许id_box_elements和id_router的多个NULL行。
我正在运行MySQL 5.1.42,所以上面讨论的问题可能有一些更新。幸运的是,它起作用了,希望它能一直保持下去。
首先摆脱现有的副本
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;
然后添加唯一约束
ALTER TABLE votes ADD UNIQUE unique_index(user, email, address);
使用
SHOW CREATE TABLE votes;
请注意,如果用户、电子邮件、地址中有任何一个值为空,则它们将被视为唯一的。
为了添加一个唯一的约束,你需要使用两个组件:
ALTER TABLE -更改表模式,
ADD UNIQUE -添加唯一约束。
然后你可以用'name'(' columnn1 ', 'column2'…)格式定义新的唯一键。
所以对于你的特定问题,你可以使用这个命令:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
你试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)