为什么我的MySQL级联删除不起作用



我有三个表:Employee、Dependent和DependensOn。出于某种原因,在我的服务器上,MySQL代码没有正确执行级联删除。我插入一个Employee和一个Dependent,然后将它们链接到DependensOn中。如果我删除Employee,它应该删除DependsOn中的相应行。然而,事实并非如此。如果我在SQLFiddle.com中运行查询,它运行得很好。为什么不起作用?

CREATE TABLE Employee 
( 
SSN int(9) not null unique, 
First_Name varchar(16) default null, 
Middle_Initial char(1) default null, 
Last_Name varchar(16) default null, 
Address varchar(64) default null, 
Phone_Number char(10) default null, 
PRIMARY KEY(SSN) 
);
CREATE TABLE Dependent
(
Dependent_Name varchar(32) NOT NULL,
Dependent_Relationship varchar(32) NOT NULL,
KEY(Dependent_Name),
KEY(Dependent_Relationship)
);
CREATE TABLE DependsOn
(
E_SSN int(9) NOT NULL UNIQUE,
D_Name varchar(32) NOT NULL,
D_Relationship varchar(32) NOT NULL,
FOREIGN KEY(E_SSN) REFERENCES Employee(SSN) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(D_Name) REFERENCES Dependent(Dependent_Name) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY(D_Relationship) REFERENCES Dependent(Dependent_Relationship) ON DELETE CASCADE ON UPDATE CASCADE
);
INSERT INTO Employee VALUES(111223333, "John", "A", "Doe", NULL, NULL);
INSERT INTO Dependent VALUES("Albert A Doe", "Son");
INSERT INTO DependsOn(111223333, "Albert A Doe", "Son");

MyISAM存储引擎允许CREATE语句中的FOREIGN KEY约束定义,但忽略它们。在表已经创建之后,将表引擎更改为支持InnoDB等约束的引擎不会追溯添加约束。必须删除并重新创建表,或者为了保留数据,可以添加约束本身。

最新更新