小编M.S*_*.S.的帖子

多列外键:将单列设置为空“ON DELETE”而不是全部

一般:给定多个列的外键,其中一些可能为 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)

mysql sql innodb foreign-keys mariadb

6
推荐指数
1
解决办法
2704
查看次数

标签 统计

foreign-keys ×1

innodb ×1

mariadb ×1

mysql ×1

sql ×1