4

でテーブルを落としたい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

私はこのテーブルを数時間ドロップすることに取り組み、インターネットで多くのトピックを検索しました。人々は最終的にdbを削除しましたが、私はdbを削除したりdbを作成したりすることは許可されていません。

4

3 に答える 3

9

まず、 toFOREIGN KEYから制約を削除します(奇妙な構文に注意してください。ただし、constraint(!)識別子を使用する必要があります)。DEPARTMENTEMPLOYEEDROP FOREIGN KEY

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

EMPLOYEE次に、テーブルをドロップします。

DROP TABLE EMPLOYEE ; 

コードの問題は、使用したことでした。DROP CONSTRAINTこれは正しいですが、AFAIKはの標準SQL構文ですALTER TABLE

ただし、MySQLは「優先」しDROP FOREIGN KEYます。つまり、この場合は標準に準拠していません。

于 2012-04-22T22:58:28.983 に答える
1

外部キー名はバッククォートで引用する必要があります。

alter table EMPLOYEE drop constraint `EMPLOYEE_ibfk_1`;
                                     ^               ^

一重引用符を使用'すると、それが単なる文字列になります。

于 2012-04-22T22:12:48.570 に答える
0

テーブルEmployeeの外部キーとテーブルemployeeへの外部キーをDepartmentから削除してから、削除する必要があります。

:部門テーブルで最初に参照されているテーブルの外部キーを削除する必要があります。

また、最初に、DepartmentテーブルのDepartmentからEmployeeへの参照をすべて削除します。

于 2012-04-22T22:08:19.547 に答える