首页 > 解决方案 > 如何在这个场景中使用 DELETE ON CASCADE?

问题描述

所以我有 3 个表,申请人、空缺和链接表。我正在尝试在删除空缺时删除申请人数据。这是我当前的 SQL 代码,这会删除申请人吗?

CREATE TABLE Applicant(
  ID INT PRIMARY KEY,
  name varchar(20),
  address varchar(20),
  VacancyID INT,
  FOREIGN KEY (VacancyID) REFERENCES Vacancy(ID) ON DELETE CASCADE);


CREATE TABLE AppVac(
             ApplicantID INT PRIMARY KEY,
             VacancyID INT PRIMARY KEY,
             FOREIGN KEY (ApplicantID) REFERENCES Applicant(ID),
             FOREIGN KEY (VacancyID) REFERENCES Vacancy(ID);

CREATE TABLE Vacancy(
             ID INT PRIMARY KEY,
             .....

标签: sqlddl

解决方案


不。Applicant与 没有关系Vacancy。被删除的是所有对应的行AppVac

如果您想要求申请者在 中至少有一行AppVac,那么您需要在表格上设置一个删除触发器。级联外键不会为您做到这一点。也就是说,级联删除是从引用表中删除,而不是从引用表中删除。


推荐阅读