为什么我的 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 必须删除并重新创建,或者为了保留数据,可以添加约束本身。
我有三个表: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 必须删除并重新创建,或者为了保留数据,可以添加约束本身。