我必须使其中一个外键唯一。问题是,我从phpMyAdmin的得到以下信息:MySQL - 唯一外键
The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2
所以我的问题是这样的:我应该打扰?没有这样的指标真的很重要吗?
我必须使其中一个外键唯一。问题是,我从phpMyAdmin的得到以下信息:MySQL - 唯一外键
The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2
所以我的问题是这样的:我应该打扰?没有这样的指标真的很重要吗?
每个带有键(主键,外键)的列都需要一个索引。相同的列是唯一的。您可能创建了两个索引(一个是创建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
只要你知道,好像你还可以有独特的外键:
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;
你可以添加,在M中创建一个FOREIGN KEY除非已经存在,否则ySQL实际上会在引用列和引用列上创建INDEX。 – Romain 2011-03-15 13:08:10
所以你说我可以删除UNIQUE索引,而列会保持UNIQUE?我通过在MySQL Workbench中检查“Unique”来添加这个索引。 – Cleankod 2011-03-15 16:23:37
目前我猜你有2个INDEX和UNIQUE类型的索引。如果是这种情况,您应该删除INDEX。 UNIQUE是独一无二的,对FK来说是足够的。 – 2011-03-15 17:44:27