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全栈知识与相关面试题,希望能够与大家共同进步。