城阳区网站建设公司,网站建设与网页设计是什么意思,制作图片模板,网站制作流程是什么MySQL无法删除外键约束中所需的索引我需要更改现有数据库以添加列。 因此#xff0c;我还想更新UNIQUE字段以包含该新列。 我试图删除当前索引但仍然收到错误MySQL Cannot drop index needed in a foreign key constraintCREATE TABLE mytable_a (ID TINYINT NOT NULL AUTO_IN…MySQL无法删除外键约束中所需的索引我需要更改现有数据库以添加列。 因此我还想更新UNIQUE字段以包含该新列。 我试图删除当前索引但仍然收到错误MySQL Cannot drop index needed in a foreign key constraintCREATE TABLE mytable_a (ID TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255) NOT NULL,UNIQUE(Name)) ENGINEInnoDB;CREATE TABLE mytable_b (ID TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255) NOT NULL,UNIQUE(Name)) ENGINEInnoDB;CREATE TABLE mytable_c (ID TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255) NOT NULL,UNIQUE(Name)) ENGINEInnoDB;CREATE TABLE mytable (ID int(11) NOT NULL AUTO_INCREMENT,AID tinyint(5) NOT NULL,BID tinyint(5) NOT NULL,CID tinyint(5) NOT NULL,PRIMARY KEY (ID),UNIQUE KEY AID (AID,BID,CID),KEY BID (BID),KEY CID (CID),CONSTRAINT mytable_ibfk_1 FOREIGN KEY (AID) REFERENCES mytable_a (ID) ON DELETE CASCADE,CONSTRAINT mytable_ibfk_2 FOREIGN KEY (BID) REFERENCES mytable_b (ID) ON DELETE CASCADE,CONSTRAINT mytable_ibfk_3 FOREIGN KEY (CID) REFERENCES mytable_c (ID) ON DELETE CASCADE) ENGINEInnoDB;mysql ALTER TABLE mytable DROP INDEX AID;ERROR 1553 (HY000): Cannot drop index AID: needed in a foreign key constraintuser391986 asked 2019-07-01T11:16:00Z6个解决方案178 votes你必须删除外键。 MySQL中的外键自动在表上创建索引(关于该主题有一个SO问题)。ALTER TABLE mytable DROP FOREIGN KEY mytable_ibfk_1 ;Brian Fisher answered 2019-07-01T11:16:16Z61 votes步骤1列出外键(注意它与索引名称不同)SHOW CREATE TABLE 结果将显示外键名称。格式CONSTRAINT FOREIGN_KEY_NAME FOREIGN KEY (FOREIGN_KEY_COLUMN) REFERENCES FOREIGN_KEY_TABLE (id),第2步删除(外键/主键/键)键ALTER TABLE 第3步删除索引。Abhishek Goel answered 2019-07-01T11:17:22Z15 votes如果你的意思是你可以这样做CREATE TABLE mytable_d (ID TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,Name VARCHAR(255) NOT NULL,UNIQUE(Name)) ENGINEInnoDB;ALTER TABLE mytableADD COLUMN DID tinyint(5) NOT NULL,ADD CONSTRAINT mytable_ibfk_4FOREIGN KEY (DID)REFERENCES mytable_d (ID) ON DELETE CASCADE; OK.但是之后ALTER TABLE mytableDROP KEY AID ;给出错误。您可以删除索引并在一个ALTER TABLE语句中创建一个新索引ALTER TABLE mytableDROP KEY AID ,ADD UNIQUE KEY AID (AID, BID, CID, DID);ypercubeᵀᴹ answered 2019-07-01T11:18:05Z6 votes因为你必须在外键字段上有一个索引所以你可以在字段上创建一个简单的索引39; AID39;CREATE INDEX aid_index ON mytable (AID);然后才删除唯一索引39; AID39;ALTER TABLE mytable DROP INDEX AID;Eli DM answered 2019-07-01T11:18:39Z2 votes外键始终需要索引。 如果没有索引强制执行约束则需要对引用表中的每个插入或更新的密钥在引用的表上进行全表扫描。 这将产生令人无法接受的性能影响。这有以下两个后果创建外键时数据库会检查索引是否存在。 如果不是则将创建索引。 默认情况下它将与约束具有相同的名称。当只有一个索引可以用于外键时它不能被删除。 如果您真的不想删除它则必须先删除外键约束或为其创建另一个索引。Stefan Mondelaers answered 2019-07-01T11:19:32Z1 votes我认为这是放弃索引的简单方法。set FOREIGN_KEY_CHECKS1;ALTER TABLE mytable DROP INDEX AID;set FOREIGN_KEY_CHECKS0;Ram E Sh answered 2019-07-01T11:19:58Z