删除外键索引时抛出MySQL错误。
我已经创建了两个表,并引用了另一个表: 我喜欢这样: 表1:删除外键索引时抛出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; 它
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需要外键和引用键的索引,以便外键检查可以快速进行,而不需要扫描表。在引用表中,必须有一个索引,其中外键列按相同顺序列为第一列。如果引用表不存在,则会自动在引用表上创建这样的索引。如果您创建了另一个可用于强制外键约束的索引,则该索引可能会在以后以静默方式删除。索引名称(如果给定)如前所述使用。对此,他们说“如果您创建了另一个可用于强制外键约束的索引,那么该索引可能会在以后被悄悄删除”。