(3-2)MySQL 外键约束的参照操作

目录

1 概述

2 CASCADE操作

2.1 记录插入操作

2.2 记录的删除操作

3 参考


1 概述

    以下操作是指进行了外键约束的创建之后,在更新表的时候,子表是否也进行相应的操作。

(1)CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。

(2)SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指定NOT NULL 关键字。 

(3)RESTRICT:拒绝对父表的删除或更新操作。

(4)NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。

2 CASCADE操作

2.1 记录插入操作

(1)对父表的操作

CREATE TABLE users1(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
);

在子表进行记录的插入操作前,必须先在父表中插入记录(原因是,父表是子表的参照),所以,先在users1的父表provinces中插入记录。

表provinces 的字段

在父表provinces中任意插入几个字段:

INSERT provinces(pname) VALUES("A");
INSERT provinces(pname) VALUES("B");
INSERT provinces(pname) VALUES("C");

查看表结构:SELECT * FROM provinces;

表provinces 的记录

(2) 对子表的操作

插入两条记录:

INSERT users1(username,pid) VALUES("Tom",3);
INSERT users1(username,pid) VALUES("Join",7);

由于父表不存在id为7的记录,所以在子表插入pid字段为7的记录时会报错。 

 

插入两条记录(后者报错)

再向子表插入记录:

INSERT users1(username,pid) VALUES("Join",1);
INSERT users1(username,pid) VALUES("Rose",3); 

2.2 记录的删除操作

首先查看父表与子表记录的情况:

父表与子表记录的情况

在父表删除一条记录(id=4的记录)

DELETE FROM provinces WHERE id = 4;

再一次查看两张表的记录情况:

删除父表字段后,父子表的记录情况

3 参考

整理自:慕课网——外键约束的参照操作 

猜你喜欢

转载自blog.csdn.net/qq_29406323/article/details/86564681