MySQL-唯一外键

MySQL-唯一外键,mysql,foreign-keys,unique,Mysql,Foreign Keys,Unique,我必须使其中一个外键独一无二。问题是,我从phpMyAdmin收到以下消息: The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2 以下索引似乎相等,应删除其中一个:发货编号\u id\u唯一、fk\u发货\u发货编号2 所以我的问题是:我应该被打扰吗?没有这样的索引真的

我必须使其中一个外键独一无二。问题是,我从phpMyAdmin收到以下消息:

The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2 以下索引似乎相等,应删除其中一个:发货编号\u id\u唯一、fk\u发货\u发货编号2 所以我的问题是:我应该被打扰吗?没有这样的索引真的很重要吗?

每一列都有一个键(主、外部)需要索引。相同,列是唯一的。您可能创建了两个索引(一个是在创建FK时创建的,另一个是在唯一约束上创建的)。如果是这种情况,只需删除其中一个索引

数据库维护两个等价的索引是一种开销

mysql > create unique index index_bar_id on foos(bar_id);
mysql > alter table foos add constraint index_bar_id foreign key (bar_id) references bars (id);

请在

上阅读更多内容,以便您知道,您似乎还可以拥有唯一的外键:

CREATE TABLE user(
uid INT NOT NULL AUTO_INCREMENT,
username VARCHAR(16) NOT NULL UNIQUE,
email_id INT NOT NULL UNIQUE,
FOREIGN KEY (email_id) REFERENCES email(uid)
    ON DELETE CASCADE
    ON UPDATE CASCADE,

PRIMARY KEY (uid));

将来,如果希望使外键唯一,只需修改外键列,如下所示:

ALTER TABLE your_table
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;

您可以补充说,在MySQL中创建外键实际上会在引用列和被引用列上创建索引,除非已经存在索引。那么您是说我可以删除唯一索引,而列将保持唯一?我在MySQL Workbench中通过选中“Unique”添加了这个索引。目前我猜您有两个索引类型:index和Unique。如果是这种情况,您应该删除索引1。唯一性是唯一性所必需的,并且对于FK来说是足够的。请参见,唯一性是特殊类型的索引,索引是通用索引。+1用于文档参考。但是,当两个索引相同时,它会导致问题吗?我试图更新一个有两个索引(都在外键上)的记录,我的逻辑有时会失败。索引键是否会减慢此操作?