我如何指定MySQL中的多个列的唯一约束?
我有一张桌子:
table votes ( id, user, email, address, primary key(id), );
现在我想使用户,电子邮件,地址唯一(一起)。
我如何在MySql中做到这一点?
- 当然这个例子只是一个例子。 所以请不要担心语义。
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
我有一个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`) );
UNIQUE KEY和预期一样工作,它允许id_box_elements和id_router的多个NULL行。
我正在运行MySQL 5.1.42,所以可能在上面讨论的问题上有一些更新。 幸运的是,它的工作原理,希望它会保持这种方式。
如果行中有一个NULL值,那么多列唯一索引在MySQL中不起作用,因为MySQL将NULL视为唯一值,至less目前在多列索引中没有任何逻辑来解决它。 是的行为是疯狂的,因为它限制了多列索引的合法应用程序,但它是什么…截至目前为止,这是一个bug已经被标记为“不会修复”的MySQL错误轨道…
你尝试过吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
这适用于MySQL版本5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
您可以通过phpMyAdmin添加多列唯一索引。 (我在版本4.0.4中testing过)
导航到目标表的结构页面。 向其中一列添加一个唯一的索引。 展开结构页面底部的“ 索引”列表,查看刚刚添加的唯一索引。 点击编辑图标,在下面的对话框中,你可以添加额外的列到唯一的索引。
MySql 5或更高的行为就像这样(我刚刚testing过):
- 您可以定义涉及可空列的唯一约束。 假设你定义了一个唯一的约束(A,B),其中A不是空的,而是B
- 当评估这样一个约束时,你可以有(A,null)多less次你想要的(相同的A值!)
- 你只能有一个(A,非空B)对
示例:PRODUCT_NAME,PRODUCT_VERSION'glass',null'glass',null'wine',1
现在,如果您尝试再次插入('wine'1),它会报告违反约束条件希望这有助于
要添加以下唯一索引是必需的:
1)table_name
2)index_name
3)你想添加索引的列
ALTER TABLE `tablename` ADD UNIQUE index-name (`column1` ,`column2`,`column3`,...,`columnN`);
在你的情况下,我们可以创build独特的索引如下:
ALTER TABLE `votes`ADD UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);
如果你想在将来避免重复。 创build另一列说id2。
UPDATE tablename SET id2 = id;
现在在两列中添加唯一:
alter table tablename add unique index(columnname, id2);