目录
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中任意插入几个字段:
INSERT provinces(pname) VALUES("A");
INSERT provinces(pname) VALUES("B");
INSERT provinces(pname) VALUES("C");
查看表结构:SELECT * FROM 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;
再一次查看两张表的记录情况: