-
外键约束介绍
Mysql外键约束(foreign key)是表的一个特殊字段,常与主键约束一起使用。外键约束是一种用于维护两个表之间数据一致性的方法。它确保引用表中的每个值都存在于主表中的某个列中。外键约束通常用于实现数据库的参照完整性。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。
-
定义外键的规则
1、主表必须已经存在于数据库中,或者是当前正在创建的表。
2、必须为主表定义主键。
3、主键不能包含空值,但允许在外键中出现空值。
4、在主表的表名后面指定列名或列名的组合,这个列或列的组合必须是主表的主键。
5、外键中列的数目必须和主表的主键中列的数目相同。
6、外键中列的数据类型必须和主表主键列的数据类型相同。
-
外键约束的创建步骤
方式1:在创建表时设置外键约束
mysql[constraint <外键名>] foreign key (字段名 [,字段名2,...]) references <主表名>(主键列1 [,主键列2,...])方式2:通过 alter...add字段添加,前提是从表中外键列中的数据必须与主表中主键列的数据一致或是还没有数据
mysqlalter table <表名> add constarint <外键名> foreign key(<列名>) references <主表名>(<列名>)eg1:一对多关系表中创建外键约束
mysqlcreate database db; --创建数据库db use db; -- 创建部门表(主表) create table if not exists department( deptno varchar(8) primary key comment '这是部门编号', depname varchar(16) --这是部门编号 )charset=utf8; -- 创建员工表(从表) create table if not exists staff( sid varchar(16) primary key, --员工编号 sname varchar(16), --员工姓名 age int, --员工年龄 dep_id varchar(8), --员工所属部门编号 foreign key (dep_id) references department(deptno) )charset=utf8;eg2:多对对关系表中外键约束的创建通常会利用中间表将两个表进行关联。如学生表和课程表,一名学生可以选多门课程,一门课程也可以被多名学生选择
mysql-- 创建学生表(主表1) create table [if not exists] students( sid int primary key auto_increment, -- 将学号设为自增主键 sname varchar(16), age int, gender enum('男','女') default '男' )charset=utf8; -- 创建课程表(主表2) create table course( cid int primary key auto_increment, -- 将课程id设为自增主键 cname varchar(32) )charset=utf8; -- 创建中间表mid_stu_course create table mid_stu_course( sid int, cid int, score double )charset=utf8; -- 分2次建立外键约束 alter table mid_stu_course add foreign key(sid) references students(sid); alter table mid_stu_course add foreign key(cid) refernces course(cid); -- 插入数据时,中间表中的sid和cid需存在于主表中,即只能在主表的sid和cid的值中选择 -
在外键约束条件下的数据操作
1、数据插入:
-- 必须先给主表添加主键列(外键约束列)的数据
-- 给从表添加数据时,外键列的值必须依赖主表的主键列。即从表外键列插入的数据必须存在于主表主键列。
2、删除数据:
-- 从表的数据可以任意删除
-- 主表的数据被从表依赖时不能被删除,未被依赖的数据才可以删除。
-
删除外键约束
mysqlalter table table_name drop foreign key <外键约束名>;
MySQL多表操作--外键约束多表关系
匿名-59722024-10-14 4:05
相关推荐
wespaul2 小时前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产一只鹿鹿鹿8 小时前
政务外网整体设计方案(PPT)2603_965148118 小时前
社区与学习资源:从入门到精通的API选品学习路径for_ever_love__8 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)AI砖家8 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点wangqiaowq8 小时前
SQL server C盘空间占满的处理文人sec8 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句数字新视界8 小时前
机房动环监控提升运维效率SelectDB技术团队9 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令lambo mercy11 小时前
Day3:结构化输出