删除外键索引时抛出MySQL错误。

删除外键索引时抛出MySQL错误。,mysql,indexing,foreign-keys,Mysql,Indexing,Foreign Keys,我已经创建了两个表,并引用了另一个表: 我喜欢这样: 表1: CREATE TABLE species ( id TINYINT NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, PRIMARY KEY(id) ) ENGINE=INNODB; 表2(上表的参考) 然后自动为zoo表中的FK_物种创建外键索引 现在我尝试删除zoo表的索引: ALTER TABLE zoo DROP INDEX FK_species; 它

我已经创建了两个表,并引用了另一个表:

我喜欢这样:

表1:

CREATE TABLE species 
(
  id TINYINT NOT NULL AUTO_INCREMENT, 
  name VARCHAR(50) NOT NULL, 
  PRIMARY KEY(id)
) ENGINE=INNODB;
表2(上表的参考)

然后自动为zoo表中的FK_物种创建外键索引

现在我尝试删除zoo表的索引:

ALTER TABLE zoo DROP INDEX FK_species;
它显示以下MySQL错误

Error on rename of '.\test\#sql-1ec_9d' to '.\test\zoo' (errno: 150)
发件人:

InnoDB支持使用ALTER TABLE删除外键:

ALTER TABLE tbl_name DROP外键fk_符号

如果创建时外键子句包含约束名称 外键,您可以引用该名称来删除外键。 否则,fk_符号值由InnoDB在以下情况下内部生成: 此时将创建外键。在需要时查找符号值 要删除外键,请使用showcreatetable语句

发件人:

InnoDB支持使用ALTER TABLE删除外键:

ALTER TABLE tbl_name DROP外键fk_符号

如果创建时外键子句包含约束名称 外键,您可以引用该名称来删除外键。 否则,fk_符号值由InnoDB在以下情况下内部生成: 此时将创建外键。在需要时查找符号值 要删除外键,请使用showcreatetable语句


你需要先弄到违禁品的名字

例如:

SHOW CREATE TABLE zoo;

-> .... 
   CONSTRAINT `zoo_ibfk_1` FOREIGN KEY (`FK_species`) REFERENCES `species` (`id`)
……然后

ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;
请在此处阅读更多信息:

您需要先获取合同名称

例如:

SHOW CREATE TABLE zoo;

-> .... 
   CONSTRAINT `zoo_ibfk_1` FOREIGN KEY (`FK_species`) REFERENCES `species` (`id`)
……然后

ALTER TABLE zoo DROP FOREIGN KEY zoo_ibfk_1;
请在此处阅读更多信息:

很有趣。这是否意味着您不能在不删除约束的情况下删除索引?是的,这是我在这里面临的问题,因为外键自动创建了索引。。。请告诉我如何创建没有索引的外键。@Manikandan:(来自同一链接):“InnoDB需要外键和引用键的索引,以便外键检查可以快速进行,而不需要扫描表。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会自动在引用表上创建这样的索引。如果您创建了另一个可用于强制外键约束的索引,则该索引可能会在以后以静默方式删除。索引名称(如果给定)如前所述使用。对此,他们说“如果您创建了另一个可用于强制外键约束的索引,那么该索引可能会在以后被静默删除。””“很有趣。这是否意味着您不能在不删除约束的情况下删除索引?是的,这是我在这里面临的问题,因为外键自动创建了索引。。。请告诉我如何创建没有索引的外键。@Manikandan:(来自同一链接):“InnoDB需要外键和引用键的索引,以便外键检查可以快速进行,而不需要扫描表。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会自动在引用表上创建这样的索引。如果您创建了另一个可用于强制外键约束的索引,则该索引可能会在以后以静默方式删除。索引名称(如果给定)如前所述使用。对此,他们说“如果您创建了另一个可用于强制外键约束的索引,那么该索引可能会在以后被悄悄删除”。