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