我有一个表格:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在,我想让列 user,email,address (三个一起)成为唯一的。
我该如何在MySQL中实现这一点?
当然,这只是一个示例,请不要担心语义。
我有一个表格:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在,我想让列 user,email,address (三个一起)成为唯一的。
我该如何在MySQL中实现这一点?
当然,这只是一个示例,请不要担心语义。
要添加唯一约束,需要使用两个组件:
ALTER TABLE
- 更改表模式和,
ADD UNIQUE
- 添加唯一约束。
然后,您可以使用格式'name'('column1', 'column2'...)
定义新的唯一键。
因此,对于您特定的问题,您可以使用以下命令:
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 `my_uniq_id` (`id_box_elements`,`id_router`)
);
唯一键(UNIQUE KEY)的作用和预期一样,可以允许id_box_elements和id_router有多个NULL行。
我正在运行MySQL 5.1.42,所以可能对上面讨论的问题进行了一些更新。幸运的是它能够正常工作,希望它能保持这种状态。
UNIQUE KEY my_uniq_id
?在当前的MariaDB中,只使用UNIQUE
就可以了。 - EML如果在行中有空值,MySQL 中的多列唯一索引不起作用,因为 MySQL 将 NULL 视为唯一值,并且目前没有逻辑来解决多列索引中的此问题。是的,这种行为很疯狂,因为它限制了许多合法的多列索引应用,但事实就是如此...截至目前,这是一个已经标记为“不会修复”的 MySQL bug。
您尝试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey (
user,
email,
address)
。我正在使用MYSQL版本5.5.24,如果您使用它,甚至可以在PHPMYADMIN中设置此项。我正在使用PMA的3.5.1版本。 - WQC这适用于mysql 5.5.32版本
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5或更高版本的行为如下(我刚刚测试过):
示例: 产品名称,产品版本 'glass',null 'glass',null 'wine',1
现在,如果您尝试再次插入('wine' 1),它将报告约束违规。 希望这可以帮助
您可以通过phpMyAdmin添加多列唯一索引。(我在版本4.0.4中进行了测试)
导航到目标表的结构页面。将唯一索引添加到其中一个列。展开结构页面底部的索引列表,以查看刚刚添加的唯一索引。单击编辑图标,在以下对话框中,您可以将其他列添加到该唯一索引。
这个教程对我有效
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
我是这样做的:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
我对唯一index_name
的约定是TableName_Column1_Column2_Column3_uindex
。
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)
);