一般:给定多个列的外键,其中一些可能为 NULL。
默认情况下(MATCH SIMPLE)只要多列外键中至少有一列为 NULL,MySQL/MariaDB InnoDB 就不会检查外键。
要求:如果从父级删除一行,则相应子级的一列应设置为 NULL,但外键中的两列不应设置为 NULL。
示例/描述:学生可能会被列入某个讲座的名单,也可能会被列入其中一个讲座小组的名单。如果讲座被删除,所有学生列表(作品)及其所有组(作品)都应被删除。如果仅删除单个组,则学生仍应列出讲座,但不应再将他们分配到组(问题)。
示例/SQL:以下 SQL 说明了此示例,但最后一条语句不起作用,因为最后一个 FOREIGN KEY 要求 LectureId 和 groupId 都可为 NULL,但使两者都可为 NULL 将意味着删除组也会将 LectureId 设置为 NULL 。
CREATE TABLE lectures (
lectureId INT NOT NULL,
title VARCHAR(10) NOT NULL,
PRIMARY KEY (lectureId)
);
CREATE TABLE groups (
lectureId INT NOT NULL,
groupNo INT NOT NULL,
title VARCHAR(10) NOT NULL,
PRIMARY KEY (lectureId,groupNo),
FOREIGN KEY (lectureId) REFERENCES lectures (lectureId)
ON UPDATE CASCADE ON DELETE CASCADE
); …Run Code Online (Sandbox Code Playgroud)