如何在MySQL中为多个列指定唯一约束?

我有一张桌子:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

现在,我想使列的用户,电子邮件,地址唯一(在一起)。

如何在MySql中执行此操作?

  • 当然,这个例子仅仅是……一个例子。 因此,请不要担心语义。

#1楼

如果您想避免将来重复。 创建另一个列,例如id2。

UPDATE tablename SET id2 = id;

现在在两列上添加唯一性:

alter table tablename add unique index(columnname, id2);

#2楼

这适用于MySQL 5.5.32版

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

#3楼

您可以通过phpMyAdmin添加多列唯一索引。 (我在4.0.4版中进行了测试)

导航到目标表的结构页面。 将唯一索引添加到列之一。 展开结构页面底部的“ 索引”列表,以查看刚刚添加的唯一索引。 单击编辑图标,然后在下面的对话框中可以向该唯一索引添加其他列。


#4楼

要添加唯一索引,需要执行以下操作:

1)table_name
2)index_name
3)要在其上添加索引的列

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

在您的情况下,我们可以如下创建唯一索引:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

#5楼

MySql 5或更高版本的行为如下(我刚刚测试过):

  • 您可以定义涉及空列的唯一约束。 假设您定义一个唯一的约束(A,B),其中A不可为空,而B为
  • 在评估这样的约束时,您可以拥有(A,null)任意次(相同的A值!)
  • 您只能有一对(A,不能为空B)

范例:PRODUCT_NAME,PRODUCT_VERSION'glass',null'glass',null'wine',1

现在,如果您尝试再次插入(“葡萄酒” 1),它将报告违反约束的情况。


#6楼

如果行中有NULL值,则多列唯一索引在MySQL中不起作用,因为MySQL将NULL视为唯一值,并且至少当前在多列索引中没有逻辑可解决。 是的,这种行为是疯狂的,因为它限制了多列索引的许多合法应用程序,但事实就是如此……到目前为止,它是一个已在MySQL上标有“无法修复”的错误错误跟踪...


#7楼

我有一个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,因此上面讨论的问题可能有一些更新。 幸运的是,它可以正常工作,并且希望它将保持这种状态。


#8楼

我这样做是这样的:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

我对唯一index_name约定是TableName_Column1_Column2_Column3_uindex


#9楼

如果要在mysql中创建表,请使用以下命令:

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)
);

#10楼

ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

#11楼

你尝试过这个吗?

UNIQUE KEY `thekey` (`user`,`email`,`address`)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值