Mysql 如何创建表并确保整行是唯一的

Mysql 如何创建表并确保整行是唯一的,mysql,Mysql,我正在尝试创建一个表,并确保整行是唯一的,下面的方法行吗 ALTER TABLE `gerrits`.`gerrit_submit_table` ADD UNIQUE idx_row_unique(`S.No`,`gerrit_id`,`SI`,`component`,`gerrit_owner`,`release_bit`,`picked_bit`); 使所有列成为主键的一部分 不过,所有的列都可能是极端的,这可能会导致表速度变慢。仔细想想,也许你可以设法减少这个独特的限制。是的,绝对有效

我正在尝试创建一个表,并确保整行是唯一的,下面的方法行吗

ALTER TABLE `gerrits`.`gerrit_submit_table` 
ADD UNIQUE idx_row_unique(`S.No`,`gerrit_id`,`SI`,`component`,`gerrit_owner`,`release_bit`,`picked_bit`);

使所有列成为主键的一部分


不过,所有的列都可能是极端的,这可能会导致表速度变慢。仔细想想,也许你可以设法减少这个独特的限制。

是的,绝对有效。添加带有逗号分隔的属性的单个unique语句可以确保整行是唯一的,尽管列中可以有重复

另一方面,如果希望使每一列都是唯一的,则可以使用独立的unique语句

如果要使用索引名指定它,请使用:

ALTER TABLE `gerrits`.`gerrit_submit_table` 
ADD UNIQUE INDEX idx_row_unique(`S.No`,`gerrit_id`,`SI`,`component`,`gerrit_owner`,`release_bit`,`picked_bit`);
如果您不关心索引名是什么,它将使用以下命令自动为您创建一个索引名:

ALTER TABLE `gerrits`.`gerrit_submit_table` 
ADD UNIQUE(`S.No`,`gerrit_id`,`SI`,`component`,`gerrit_owner`,`release_bit`,`picked_bit`);

它不应该是
添加唯一索引idx\u row\u UNIQUE(…)
?否。所有列不应成为主键的一部分。如果OP想使用外键将其连接到另一个表,那将是可笑的。它应该是
添加唯一索引idx_row_UNIQUE(…)
还是
添加唯一索引idx_row_UNIQUE(…)
应该是
添加唯一索引idx_row_UNIQUE(…)
添加唯一索引idx_row_UNIQUE(…)我已经为您更新了我的答案。在第一个示例中,不确定单词索引是否是可选的,您可以尝试将其关闭,看看会发生什么。您将能够执行
显示gerrit_submit_表中的列
show create table gerrit\u submit\u table\G
查看两者的重新创建代码的外观,并查看是否存在差异。可以使用\G选项代替分号以长格式显示结果。