MySQL为什么我不能删除自定外键上的一行

MySQL为什么我不能删除自定外键上的一行,mysql,foreign-keys,Mysql,Foreign Keys,表当前为 CREATE TABLE Employee (SSN INT NOT NULL, Name VARCHAR(20) NOT NULL, Supervisor INT, DNo INT, PRIMARY KEY(SSN), FOREIGN KEY(Supervisor) REFERENCES Employee(SSN), FOREIGN KEY(DNo) REFERENCES Department(DNumber) ON DELETE

表当前为

CREATE TABLE Employee 
(SSN  INT  NOT  NULL,
Name    VARCHAR(20) NOT NULL, 
Supervisor   INT,
DNo   INT,
PRIMARY   KEY(SSN),
FOREIGN    KEY(Supervisor)   
REFERENCES   Employee(SSN),
FOREIGN   KEY(DNo) 
REFERENCES Department(DNumber)
ON DELETE  SET NULL
ON UPDATE CASCADE);
和查询:

SSN Name  Supervisor   DNo
12  Jack  NULL         NULL
14  Cath  12           6
18  Cath  12           NULL
在MySQL中,它给出了错误:

DELETE FROM Employee WHERE SSN = 12;

我不要求删除的解决方案。我想解释一下为什么不能删除这个元组

您的
ON DELETE在更新级联时设置NULL
仅适用于
DNo
外键,而不适用于
Supervisor
外键

如果未提供外键选项,则会导致操作失败

如果您不想要,请提供您想要的选项,例如

Error Code:1451. Cannot delete or update a parent row:a foreign key constraint fails...

您仍然有两行引用了您试图删除的那一行,而FK的定义没有任何选项,因此在Mysql Workbench中它是“on delete restrict”,我明确地为删除和更新情况选择了无操作,因为据我从学校学到的默认值是sql。
无操作
表示“什么都不做”因此,不会将任何内容设置为null或删除。这反过来意味着另外两行仍将引用您尝试删除的行<代码>无操作并不意味着将不执行违反FK的DML语句。(
无操作
本质上与
限制
相同-我一直不明白为什么有两个选项可以做相同的事情)。
FOREIGN KEY(Supervisor) REFERENCES Employee(SSN) ON DELETE SET NULL