-
外键约束介绍
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
相关推荐
懒羊羊不懒@1 小时前
【MySQL | 基础】通用语法及SQL分类llxxyy卢1 小时前
基于时间的 SQL 盲注-延时判断和基于布尔的 SQL 盲注Yeats_Liao2 小时前
时序数据库系列(六):物联网监控系统实战珊珊而川2 小时前
MAC-SQL:黄金标准错误一 乐3 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)许愿OvO5 小时前
MySQL触发器lcanfly5 小时前
Mysql作业4蓝象_6 小时前
docker安装配置mysql喜欢踢足球的老罗6 小时前
认证与授权:详解大型系统中用户中心与RBAC的共生关系zhaomx19896 小时前
Spring 事务管理 Transaction rolled back because it has been marked as rollback-only