首页 > 数据库 >数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧

数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧

时间:2024-01-31 10:32:41浏览次数:38  
标签:实用技巧 删除 必知 外键 约束 主表 数据 主键

数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧_字段

SQL 约束-外键约束

简介

外键约束(FOREIGN KEY,缩写 FK)是用来实现数据库表的参照完整性的。它是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须且有主键约束或者唯一约束。被依赖的表通常称之为父表或者主表,设置外键约束的表称为子表或从表。

相关概念

  • 主键:可以唯一标识一条记录的列
  • 外键:从表中与主表的主键对应的字段
  • 主表:外键所指向的表,约束其他表的表
  • 从表:外键所在的表,被约束的表
  • 价值:建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性

建立外键约束

  • 创建表时添加外键约束:CONSTRAINT``[外键约束的名称] FOREIGN KEY (外键字段) REFERENCES [主表名称(主键字段)]
  • 添加外键约束:ALTER TABLE [表名] ADD CONSTRAINT [外键约束的名称]``FOREIGN KEY``[外键字段] REFERENCES [主表名称(主键字段)]
#创建一个关联到主表的从表
CREATETABLEemp_part(
emp_idINTPRIMARYKEYAUTO_INCREMENT,
enameVARCHAR(20),
ageINT,
genderVARCHAR(10),
dept_idINT,
-- 添加外键约束
CONSTRAINTemp_deptFOREIGNKEY(dept_id)REFERENCESdept(id)
);
#插入一条非法数据
INSERTINTOemp_partVALUES(1,'cindy',20,'female','4')

删除外键约束

  • 语法:
ALTER TABLE [表名] DROP FOREIGN KEY [外键约束名称]
  • 注意事项
  • 从表外键数据类型必须与主表的主键一致
  • 删除数据时,需先删除从表数据再删除主表的数据
  • 添加数据时先添加主表数据,再添加从表数据
#删除外键约束

ALTERTABLEemp_partDROPFOREIGNKEYemp_dept

#插入一条非法数据
INSERTINTOemp_partVALUES(1,'cindy',20,'female','4')

SELECT*FROMemp_part

#向主表中插入一条数据
INSERTINTOdeptVALUES(2,'运营部','张三','北京')
#向从表中插入一条数据
INSERTINTOemp_partVALUES(1,'cindy',20,'female','2')
#删除主表中的数据
DELETEFROMdeptWHEREid=2

级联删除

  • 删除主表数据的同时,也删除掉从表中相关的数据
  • ON DELETE CASCADE
#创建员工信息表并添加级联删除的外键约束
CREATETABLEemp_part(
emp_idINTPRIMARYKEYAUTO_INCREMENT,
enameVARCHAR(20),
ageINT,
genderVARCHAR(10),
dept_idINT,
-- 添加外键约束
CONSTRAINTemp_deptFOREIGNKEY(dept_id)REFERENCESdept(id)
-- 设置允许级联删除
ONDELETECASCADE
);
#向员工信息表中添加一条数据
INSERTINTOemp_partVALUES(1,'cindy',20,'female','2')
#删除主表中部门id=2的部门
DELETEFROMdeptWHEREid=2
#查看从表中的数据是否同时被删除
SELECT*FROMemp_part

总结

SQL 中的外键约束是一种参照完整性约束,它用于确保两个表之间的数据一致性,构建了一种父子关系。当在子表中插入或更新数据时,外键约束确保所提供的外键值必须在父表的相应主键或唯一键值范围内。如果父表中不存在相应的值,则操作将失败,从而确保了数据的完整性和一致性。

霍格沃兹的测试管理班是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划。

数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧_数据_02

标签:实用技巧,删除,必知,外键,约束,主表,数据,主键
From: https://blog.51cto.com/u_16547786/9503446

相关文章

  • 规范化命名外键注释
      DROPPROCEDUREifEXISTSrename_fk_col_comment;DELIMITER//CREATEPROCEDURE`rename_fk_col_comment`(IN`prefix_tbl_name`VARCHAR(255))BEGINDECLAREtb_nameVARCHAR(200);DECLAREcons_nameVARCHAR(200);DECLAREcol_nameVARCHAR(200)......
  • MySQL必知必会 pdf下载
    《MySQL必知必会》MySQL是世界上最受欢迎的数据库管理系统之一。书中从介绍简单的数据检索开始,逐步深入一些复杂的内容,包括联结的使用、子查询、正则表达式和基于全文本的搜索、存储过程、游标、触发器、表约束,等等。通过重点突出的章节,条理清晰、系统而扼要地讲述了读者应该掌握......
  • Git必知必会基础(18):PyCharm中使用Git
     本系列汇总,请查看这里:https://www.cnblogs.com/uncleyong/p/10854115.html目前主流ide是pycharm、idea等,他们可以集成git,下面简单分享下用法。数据准备远程仓库 演示:在PyCharm中使用Git(IDEA中类似)配置GitSettings——>VersionControl——>Git——>指定git命令的执行......
  • Git必知必会基础(12):远程冲突(conflicts)解决--merge
     演示场景虽然每次合并代码前会先把分支更新到最新,但是在你pull后到push前这段时间,可能其它小伙伴又push了,那么你的分支就不是最新的了在push的时候就会失败,比如遇到这种提示信息:Togitee.com:qzcsbj/pytest_apiautotest.git![rejected]master->master(fetchfirst)error:......
  • Git必知必会基础(16):git clone、git pull、git fetch、git push的区别
     gitclone没有本地仓库,将远端的整个项目下载到本地 gitpull本地已经有项目但不是最新(比如你的同事往远处仓库提交了代码),从远程获取最新版本并merge到本地,也就是将远程指定分支拉取到本地指定分支上命令格式:gitpull[远程仓库名][远程分支名]:[本地分支名]本地分支是当前分......
  • queryset必知必会13条
    queryset必知必会13条<1>all():查询所有结果<2>filter(**kwargs):它包含了与所给筛选条件相匹配的对象<3>get(**kwargs):返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。<4>exclude(**kwargs):它包含了与所......
  • SQL必知必会(第5版)PDF下载
    SQL是使用最为广泛的数据库语言,几乎所有重要的DBMS都支持SQL。本书是麻省理工学院、伊利诺伊大学等众多大学的参考教材,由浅入深地讲解了SQL的基本概念和语法,涉及数据的排序、过滤和分组,以及表、视图、联结、子查询、游标、存储过程和触发器等内容,实例丰富,便于查阅。与其他同类图书......
  • TypeScript 实用技巧(下)
    第六部分:杂项原文:exploringjs.com/tackling-ts/pt_miscellaneous.html译者:飞龙协议:CCBY-NC-SA4.0下一步:23 使用类型进行计算的概述二十三、类型计算概述原文:exploringjs.com/tackling-ts/ch_computing-with-types-overview.html译者:飞龙协议:CCBY-NC-SA4.023.......
  • TypeScript 实用技巧(上)
    第一部分:起步原文:exploringjs.com/tackling-ts/pt_preliminaries.html译者:飞龙协议:CCBY-NC-SA4.0接下来:1 关于本书一、关于这本书原文:exploringjs.com/tackling-ts/ch_about-book.html译者:飞龙协议:CCBY-NC-SA4.01.1 这本书的主页在哪里?1.2 这本书包括什......
  • TypeScript 实用技巧(中)
    十四、向类型添加特殊值原文:exploringjs.com/tackling-ts/ch_special-values.html译者:飞龙协议:CCBY-NC-SA4.014.1 在带内添加特殊值14.1.1 向类型添加null或undefined14.1.2 向类型添加符号14.2 在带外添加特殊值14.2.1 辨别式联合14.2.2 其......