数据库基础--MySQL多表查询之外键约束

MySQL多表关系

一对一

顾名思义即一个对应一个的关系,例如身份证号对于每个人来说都是唯一的,即个人信息表与身份证号信息表是一对一的关系。车辆信息表与车牌信息表也是属于一对一的关系。

一对多

即一个表当中的一个字段信息,对应另一张表多条信息。例如:一个班级可以拥有多个学生,即班级信息表与学生信息表是一对多关系(站在班级角度),即学生信息表的班级ID,与班级信息表的班级ID,站在班级的角度为一对多的关系。相似的关系还有部门信息表与员工表。

多对多

即信息之间的多对多的关系。举例:一名学生可以学习多门课程,而一门课程又可被多名学生选择,课程信息表与学生选课表之间即为多对多的关系。

主外键约束

主键约束

PRIMARY key,一般用来绑定一个非空字段。

外键约束

经常与主键约束一起用。对于两个有关联关系的表来说,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。

创建外键约束

语法:Constraint 外键名称 FOREIGN KEY 关联字段 REFERENCES 主表名(关联字段)

代码示例

CREATE TABLE `TestMain`(
	`id` INT Not NULL AUTO_INCREMENT,
	 `name`VARCHAR(10),
	  `introduction` VARCHAR(255),
		PRIMARY KEY(`id`)
);

CREATE TABLE `Test`(
	`id` INT Not NULL AUTO_INCREMENT,
	 `name`VARCHAR(10),
	  `introduction` VARCHAR(255),
		`age` INT(3) DEFAULT '3',
		testid INT NOT NULL,
		PRIMARY KEY(`id`),
		CONSTRAINT TEST_ID FOREIGN KEY (testid) REFERENCES TestMain(id)
);

释义:Test表当中的testid字段,与TestMain表中的id字段为主外键关系。

测试:

首先向主表中插入两条数据

再向从表中尝试插入testid为3的数据:

尝试保存,结果报错,表示为一个外键约束错误,因为从表中的testid与主表的id为外键约束关系,即从表想要插入的testid,是主表中不存在的id的,则从表中的testid字段就会插入失败

此时我们将testid换为主表中存在的id,此时则插入成功

至此,我们可以看出外键约束的一个重要作用就是,防止用户插入无效数据。

验证外键约束

特点:

1.外键的值必须要在主表中存在(上述已验证)

2.主表当中一定要有值才能进行外键约束,如若主表为空表,则无法进行从表值的插入

3.删除外键约束:无法通过直接删除主表删除成功,因为从表中有对应数据关联着主表。故要想删除外键约束,必须先删除从表相关的数据,进而才能删除主表当中对应的数据。

写在最后

外键约束是MySQL应用中十分重要的一部分,在后期的项目开发过程中,涉及到多表关联的时候,外键约束会起到十分大的作用。就拿如今日常的外卖平台来说,就单单一个点单出单功能就有着外键约束的影子,用户订单表与商家订单表,两张不同的表,但用户下单后的订单号与商家接单的订单号一定是相同的,这里就有外键约束的影子,类似的运用还有很多很多。只要大家理解了外键约束,就能够慢慢的将其运用到实际项目当中去。笔者小,中,大厂均匀面试经历,每日分享JAVA全栈知识与相关面试题,希望能够与大家共同进步。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值