如何在 MySQL 中为多列指定唯一约束?
我有一个表:
table votes (
id,
user,
email,
address,
primary key(id),
);
如何使用户、电子邮件、地址列唯一 - 即确保不存在任何对所有三列都具有相同值的行?
I have a table:
table votes (
id,
user,
email,
address,
primary key(id),
);
How can I make the columns user, email, address unique - i.e., ensure that there isn't any pair of rows that has identical values for all three columns?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
发布评论
评论(15)
痕至2024-07-22 19:25:50
我有一个 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,所以可能对上面讨论的问题有一些更新。 幸运的是,它有效,并希望它能保持这种状态。
森林迷了鹿2024-07-22 19:25:50
本教程对我有用
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
风筝有风,海豚有海2024-07-22 19:25:50
如果您在 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)
);
瀟灑尐姊2024-07-22 19:25:50
首先删除现有的重复项
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'('column1', 'column2'...)
定义新的唯一键。因此,对于您的特定问题,您可以使用以下命令:
To add a unique constraint, you need to use two components:
ALTER TABLE
- to change the table schema and,ADD UNIQUE
- to add the unique constraint.You then can define your new unique key with the format
'name'('column1', 'column2'...)
So for your particular issue, you could use this command: