我有一张桌子:
table votes (
id,
user,
email,
address,
primary key(id),
);
现在我想让列用户、电子邮件、地址(一起)唯一。
我如何在 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,所以上面讨论的问题可能有一些更新。幸运的是它有效,希望它会保持这种状态。
如果行中有 NULL 值,则多列唯一索引在 MySQL 中不起作用,因为 MySQL 将 NULL 视为唯一值,并且至少目前没有逻辑可以在多列索引中解决它。是的,这种行为很疯狂,因为它限制了多列索引的许多合法应用程序,但它就是这样......到目前为止,这是一个在 MySQL 上被标记为“将无法修复”的错误错误跟踪...
你试过这个吗?
UNIQUE KEY `thekey` (`user`,`email`,`address`)
UNIQUE KEY
thekey` (user
,email
,address
)`。我正在使用 MYSQL 版本 5.5.24 如果您正在使用它,您甚至可以在 PHPMYADMIN 中设置它。我正在使用 3.5.1 版本的 PMA。
这适用于 mysql 版本 5.5.32
ALTER TABLE `tablename` ADD UNIQUE (`column1` ,`column2`);
MySql 5 或更高版本的行为如下(我刚刚测试过):
您可以定义涉及可空列的唯一约束。假设您定义了一个唯一的约束 (A, B),其中 A 不可为空,但 B 为
在评估这样的约束时,您可以拥有 (A, null) 任意多次(相同的 A 值!)
你只能有一对 (A, not null B)
示例:PRODUCT_NAME, PRODUCT_VERSION 'glass', null 'glass', null 'wine', 1
现在,如果您再次尝试插入 ('wine' 1),它将报告违反约束希望这会有所帮助
您可以通过 phpMyAdmin 添加多列唯一索引。 (我在 4.0.4 版本中测试过)
导航到目标表的结构页面。向其中一列添加唯一索引。展开结构页面底部的索引列表以查看您刚刚添加的唯一索引。单击编辑图标,然后在以下对话框中,您可以向该唯一索引添加其他列。
我这样做:
CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);
我对唯一 index_name
的约定是 TableName_Column1_Column2_Column3_uindex
。
如果您在 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)
);
本教程对我有用
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);
https://www.mysqltutorial.org/mysql-unique-constraint/
要添加唯一索引,需要以下内容:
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`);
如果您想在将来避免重复。创建另一个列,例如 id2。
UPDATE tablename SET id2 = id;
现在在两列上添加唯一性:
alter table tablename add unique index(columnname, id2);
首先摆脱现有的重复
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;
请注意,如果其中任何一个具有空值,则用户、电子邮件、地址将被视为唯一。
对于 PostgreSQL... 索引对我不起作用;它给了我一个错误,所以我这样做了:
alter table table_name
add unique(column_name_1,column_name_2);
PostgreSQL 给唯一索引起了自己的名字。我想您可以在表的选项中更改索引的名称,如果需要更改...