我需要修改现有数据库以添加列.因此,我还想更新UNIQUE字段以包含新列.我正试图删除当前索引,但仍然得到错误MySQL Cannot drop index needed in a foreign key constraint

CREATE TABLE mytable_a (
ID          TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name        VARCHAR(255) NOT NULL,
UNIQUE(Name)
) ENGINE=InnoDB;

CREATE TABLE mytable_b (
ID          TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name        VARCHAR(255) NOT NULL,
UNIQUE(Name)
) ENGINE=InnoDB;

CREATE TABLE mytable_c (
ID          TINYINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Name        VARCHAR(255) NOT NULL,
UNIQUE(Name)
) ENGINE=InnoDB;


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
) ENGINE=InnoDB;




mysql> ALTER TABLE mytable DROP INDEX AID;
ERROR 1553 (HY000): Cannot drop index 'AID': needed in a foreign key constraint

推荐答案

你必须放下外键.MySQL中的外键会自动在表上创建一个索引(主题上有一个SO Question).

ALTER TABLE mytable DROP FOREIGN KEY mytable_ibfk_1 ; 

Mysql相关问答推荐

S优化联接更新的最佳方式是什么?

使用MySQL工作台导出具有数据的数据库表并导入到其字段具有不同数据类型的同一表中

在带有 D.I 的 .NET AWS Lambda 中使用 MySql.Data

将时间戳四舍五入到最接近的半小时而不遗漏丢失的数据

如何在Mysql中使用With和Values

MySQL 在第一个匹配行后停止搜索 N 行(不是 LIMIT)

如何使用减号运算符编写 sql 查询以返回缺少相应值的行?

最后一个字母 '%n' 的 mysql SELECT 字符串不起作用

如何根据 R 中的价格范围将数据从一列复制到新列?

如何使用 DBD::mysql 判断 MySQL 服务是否正在运行

有人可以帮我用 R 编程解决这个问题吗?

在 MySQL 中转换 JSON 数组值

Select 多列但仅按 1 列分组

SQL 查找边界之间的值

使用 ON DUPLICATE KEY 将列增加一定数量 MySQL NodeJS

MySQL Workbench - 如何同步 EER 图

如何查看打开了多少 MySQL 连接?

不是唯一的表/别名

如何让mysql自动启动? (仅限 linux-cli)

什么是mysql的BETWEEN性能超过..?