MySQL删除表

AL9*_*L90 2 mysql foreign-keys sql-drop

我想放一张桌子 drop table EMPLOYEE;

但我得到错误: #1217 - Cannot delete or update a parent row: a foreign key constraint fails

我在互联网上环顾四周,以显示隐藏的限制,并发现:

CREATE TABLE `EMPLOYEE` (
`Ssn` int(9) NOT NULL,
`Dno` int(11) NOT NULL,
UNIQUE KEY`Ssn_8` (`Ssn`),
UNIQUE KEY`Dno_13` (`Dno`),
CONSTRAINT `EMPLOYEE_ibfk_1` FOREIGN KEY(`Dno`) REFERENCES `DEPARTMENT` (`Dnumber`),
CONSTRAINT `EMPLOYEE_ibfk_2` FOREIGN KEY(`Dno`) REFERENCES `DEPARTMENT` (`Dnumber`),
CONSTRAINT `EMPLOYEE_ibfk_3` FOREIGN KEY(`Dno`) REFERENCES `EMPLOYEE` (`Dno`),
CONSTRAINT `EMPLOYEE_ibfk_4` FOREIGN KEY(`Dno`) REFERENCES `EMPLOYEE` (`Dno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1




   CREATE TABLE `DEPARTMENT` (
`Dnumber` int(11) NOT NULL,
`Mgr_ssn` int(9) NOT NULL,
UNIQUE KEY`Mgr_ssn` (`Mgr_ssn`),
UNIQUE KEY`Dnumber` (`Dnumber`),
CONSTRAINT `DEPARTMENT_ibfk_1` FOREIGN KEY(`Mgr_ssn`) REFERENCES `EMPLOYEE` (`Ssn`),
CONSTRAINT `DEPARTMENT_ibfk_2` FOREIGN KEY(`Mgr_ssn`) REFERENCES `EMPLOYEE` (`Ssn`),
CONSTRAINT `DEPARTMENT_ibfk_3` FOREIGN KEY(`Mgr_ssn`) REFERENCES `DEPARTMENT` (`Mgr_ssn`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
Run Code Online (Sandbox Code Playgroud)

在找到这个之后,我尝试首先删除约束: alter table EMPLOYEE drop contraint 'EMPLOYEE_ibfk_1';

但我一直在: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''EMPLOYEE_ibfk_1'' at line 1

我已经努力将这张桌子丢了几个小时,并在互联网上搜索了很多主题.人们最终放弃了数据库,但我未经授权丢弃数据库或创建数据库.

ype*_*eᵀᴹ 7

首先拆下FOREIGN KEY从约束DEPARTMENTEMPLOYEE(注意是怪异的语法,你应该使用DROP FOREIGN KEY,但与约束()标识!):

ALTER TABLE DEPARTMENT
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_1 ,
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_2 ;
Run Code Online (Sandbox Code Playgroud)

然后放下EMPLOYEE桌子:

DROP TABLE EMPLOYEE ; 
Run Code Online (Sandbox Code Playgroud)

你的代码的问题是你使用过DROP CONSTRAINT- 这是正确的,AFAIK它是标准的SQL语法ALTER TABLE.

然而,MySQL"更喜欢" DROP FOREIGN KEY.换句话说,它不符合这种情况下的标准.