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

Why is my MySQL cascade deletion not working?

我有三个表:Employee、Dependent 和 DependsOn。出于某种原因,在我的服务器上,MySQL 代码没有正确执行级联删除。我在 DependsOn 中插入一个 Employee、一个 Dependent,然后 link 他们。如果我删除 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 约束,但会忽略它们。在已经创建 table 之后,将 table 引擎更改为支持此类约束(例如 InnoDB)的引擎不会追溯添加约束。 table 必须删除并重新创建,或者为了保留数据,可以添加约束本身。