外键约束的参照

1、CASCADE ([kæˈskeɪd] 串行):表之间有外键约束时,若对父表进行删除或更新操作是,与其关联的子表会自动进行相应的操作

e.g.
创建父表tb2(包含参照列的表)

CREATE TABLE tb2(
id SMALLINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
pname VARCHAR(20) NOT NULL
);
SHOW COLUMNS FROM tb2;#查看父表tb2的表结构

可看到如图:

tb2表结构

在表中插入数据

INSERT INTO tb2 (pname) VALUES('A');
INSERT INTO tb2 (pname) VALUES('B');
INSERT INTO tb2 (pname) VALUES('C');

SELECT * FROM jdbc.tb2;得到如图:

tb2的记录

在创建子表users1:

CREATE TABLE users1 (
id SMALLINT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY ,
username VARCHAR(20) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES tb2 (id) ON DELETE CASCADE#设置其参照为CASCADE
);

SHOW COLUMNS FROM users1;可以看到users1的表结构:

users1的表结构

这时候就可以对子表users1插入数据:

INSERT INTO users1 (username,pid) VALUES ('小明',3);
INSERT INTO users1 (username,pid) VALUES ('小李',1);
INSERT INTO users1 (username,pid) VALUES ('李雷',2);

可以看到如图所示:


users1中的记录

但是如果插入如下语句:

INSERT INTO users1 (username,pid) VALUES ('小明',6);

会得到如下错误代码:

Error Code: 1452. 
Cannot add or update a child row: a foreign key constraint fails (`jdbc`.`users1`, 
CONSTRAINT `users1_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `tb2` (`id`) 
ON DELETE CASCADE)

因为父表中没有id为6的记录,不能被参照,故会失败
需注意,若此时在插入一条正确的记录

INSERT INTO users1 (username,pid) VALUES ('小黑',2);

再查看user1表:


users1中的记录

可以看到新插入的记录id不连续,因为虽然上一条记录插入失败,但编号已然增加过了!
好回到正题,将tb2中的一条记录删除看tb2表和user1表会有什么变化:

DELETE FROM tb2 WHERE id = 3;

然后得到下图:


tb2中的记录

tb2中id为3的记录被删除


user1中的记录

而同时user1中的pid为3的记录也同时被删除(即user1中id为1的记录被删
除),这便是CASCADE
2、SET NULL:表之间有外键约束时,若对父表进行删除或更新操作是,与其关联的子表的外键列会被这位NULL(必须保证该外键列未设置NOT NULL)
3、RESTRICT [rɪˈstrɪkt] 限制:拒绝父表的更新
4、NO ACTION :标准SQL语句,在MySQL中与RESTRICT相同
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 外键的定义: 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。 外键的作用 ...
    诗人小坏阅读 4,839评论 0 0
  • MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子...
    沉默剑士阅读 12,153评论 0 16
  • 1、MySQL启动和关闭(安装及配置请参照百度经验,这里不再记录。MySQL默认端口号:3306;默认数据类型格式...
    强壮de西兰花阅读 3,933评论 0 1
  • 回顾和概述 数据类型 整型 浮点型 字符型 日期时间型 数据表操作 如何创建数据表 PRIMARY KEY(主键约...
    齐天大圣李圣杰阅读 4,030评论 0 0
  • 心要往前走 脚步却不由自主的停下来 闭上眼 我在回忆那拥抱时的心跳 很慌乱
    熊宝123阅读 1,396评论 0 0

友情链接更多精彩内容