首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL drop表

MySQL drop表
EN

Stack Overflow用户
提问于 2012-04-23 06:05:00
回答 3查看 15.7K关注 0票数 4

我想用drop table EMPLOYEE;删除一个表

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

我在互联网上查看了一下隐藏的约束条件,发现:

代码语言:javascript
复制
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

我已经努力了好几个小时,在网上搜索了很多话题。人们最终删除了数据库,但我无权删除数据库或创建数据库。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-23 06:58:29

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

代码语言:javascript
复制
ALTER TABLE DEPARTMENT
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_1 ,
  DROP  FOREIGN KEY  DEPARTMENT_ibfk_2 ;

然后删除EMPLOYEE表:

代码语言:javascript
复制
DROP TABLE EMPLOYEE ; 

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

然而,MySQL“更喜欢”DROP FOREIGN KEY。换句话说,在这种情况下,它不符合标准。

票数 9
EN

Stack Overflow用户

发布于 2012-04-23 06:12:49

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

代码语言:javascript
复制
alter table EMPLOYEE drop constraint `EMPLOYEE_ibfk_1`;
                                     ^               ^

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

票数 1
EN

Stack Overflow用户

发布于 2012-04-23 06:08:20

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

备注部门:需要先在部门表中删除被引用的表的外键。

还要先删除Department表中从Department到Employee的所有引用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10272526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档