无法在MySQL中删除外键

Vat*_*ato 21 mysql

我在课程和教练之间有一对多的关系,我想放弃.当我试图删除课程表中的instructorID时,它告诉我.我不能放弃它,因为它是外键.然后我决定放弃它:

ALTER TABLE course DROP FOREIGN KEY instructorID
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

#1091 - Can't DROP 'InstructorID'; check that column/key exists 
Run Code Online (Sandbox Code Playgroud)

我不知道这个错误意味着什么.我究竟做错了什么?

小智 44

请运行SHOW CREATE TABLE course;以确保instructorID是外键约束的名称.

附加:错误意味着MySQL搜索名为"InstructorID"的外键约束,但没有具有此类名称的约束,也许这是您的列名,但您必须使用约束名称来删除外键.


Elh*_*ani 25

运行后SHOW CREATE table course; 你应该找到fk符号,它通常类似于下面的符号:

(course_ibfk_1) 
Run Code Online (Sandbox Code Playgroud)

根据您使用的mysql版本,它可能会有所不同,然后使用fk符号删除外键,如下所示:

alter table course drop foreign key course_ibfk_1;
Run Code Online (Sandbox Code Playgroud)

  • 这需要比我在SO上找到的过去几个答案更多的赞成.我无法相信语法是使用'通用'CONSTRAINT名称而不是实际的外键列名称.这非常阻碍 (2认同)

小智 6

您需要删除“外键约束”和“键”。

Alter Table <table name> drop foreign key <constraint_name> 
Alter table <table name> drop key <column name>
Run Code Online (Sandbox Code Playgroud)