MySQL删除表

62o28rlo  于 2023-05-21  发布在  Mysql
关注(0)|答案(3)|浏览(128)

我想删除包含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

在发现这一点后,我尝试首先使用以下命令放弃约束: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
我已经工作了几个小时,在下降这张表,现在和搜索许多主题在互联网上。人们最终放弃了数据库,但我无权放弃数据库或创建数据库。

5fjcxozz

5fjcxozz1#

首先,从DEPARTMENTEMPLOYEE删除FOREIGN KEY约束(注意奇怪的语法,你应该使用DROP FOREIGN KEY,但要使用约束(!)标识符):

ALTER TABLE DEPARTMENT
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_1 ,
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_2 ;

然后删除EMPLOYEE表:

DROP TABLE EMPLOYEE ;

你的代码的问题是你使用了DROP CONSTRAINT--这是正确的,AFAIK它是ALTER TABLE的标准SQL语法。
但是,MySQL“更喜欢”DROP FOREIGN KEY。换句话说,在这种情况下,它不符合标准。

vaj7vani

vaj7vani2#

外键名称需要用反引号引起来:

alter table EMPLOYEE drop constraint `EMPLOYEE_ibfk_1`;
                                     ^               ^

使用'单引号将其转换为字符串。

bf1o4zei

bf1o4zei3#

您需要删除表Employee中的外键以及Department中表Employee的外键,然后尝试删除它。

注意:需要在department表中先去掉被引用表的外键。

另外,请首先删除Department表中从Department到Employee的所有引用。

相关问题