【发布时间】:2011-03-15 13:00:33
【问题描述】:
我必须使其中一个外键唯一。问题是,我从 phpMyAdmin 收到以下消息:
以下索引似乎相等,应删除其中一个:consignmentnumber_id_UNIQUE、fk_consignments_consignmentnumbers2所以我的问题是:我应该被打扰吗?没有这样的索引真的很重要吗?
【问题讨论】:
标签: mysql foreign-keys unique
我必须使其中一个外键唯一。问题是,我从 phpMyAdmin 收到以下消息:
以下索引似乎相等,应删除其中一个:consignmentnumber_id_UNIQUE、fk_consignments_consignmentnumbers2所以我的问题是:我应该被打扰吗?没有这样的索引真的很重要吗?
【问题讨论】:
标签: mysql foreign-keys unique
每个带有键(主键、外键)的列都需要一个索引。与列是唯一的相同。您可能创建了两个索引(一个在创建 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);
阅读更多http://sixarm.com/about/mysql-create-indexes-foreign-keys-constraints.html
【讨论】:
未来,如果你想让你的外键唯一,你可以像这样简单地修改你的外键列:
ALTER TABLE your_table
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;
【讨论】:
如您所知,您似乎也可以拥有 UNIQUE 外键:
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));
【讨论】: