我必须使其中一个外键唯一。问题是,我从phpMyAdmin收到以下消息:
The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2
所以我的问题是:我应该被打扰吗?没有这样的索引真的很重要吗?
答案 0 :(得分:14)
每个具有密钥(主要,外部)的列都需要索引。列与唯一相同。您可能创建了两个索引(一个在创建FK时,另一个在Unique约束上)。如果是这种情况,只需删除其中一个索引。
DB维护两个等效索引的开销。
答案 1 :(得分:7)
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
了解详情答案 2 :(得分:2)
将来,如果您想使外键唯一,您只需修改外键列,如下所示:
ALTER TABLE your_table
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;
答案 3 :(得分:0)
您知道,似乎您也可以使用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));