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

轻松学习SQL外键约束的核心原理和实用技巧

时间:2024-01-31 11:26:54浏览次数:44  
标签:实用技巧 删除 外键 约束 SQL 主表 数据 主键

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

SQL 约束-外键约束

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

简介

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

标签:实用技巧,删除,外键,约束,SQL,主表,数据,主键
From: https://www.cnblogs.com/hogwarts/p/17998807

相关文章

  • mysql 创建数据库、创建用户
    --设置密码SHOWVARIABLESLIKE'validate_password%';setglobalvalidate_password_check_user_name='ON';setglobalvalidate_password_policy='LOW';setglobalvalidate_password_length=6; --创建数据库createdatabaseifnotex......
  • 数据库新手必知!轻松学习SQL外键约束的核心原理和实用技巧
    SQL约束-外键约束简介外键约束(FOREIGNKEY,缩写FK)是用来实现数据库表的参照完整性的。它是指表中某个字段的值依赖于另一张表中某个字段的值,而被依赖的字段必须且有主键约束或者唯一约束。被依赖的表通常称之为父表或者主表,设置外键约束的表称为子表或从表。相关概念主键:可以唯一......
  • sql注入
    如何检测SQL注入漏洞您可以使用一组针对应用程序中每个入口点的系统测试来手动检测SQL注入。为此,您通常需要提交:单引号字符,并查找错误或其他异常。'一些特定于SQL的语法,这些语法的计算结果为入口点的基本(原始)值和不同的值,并在应用程序响应中查找系统差异。布尔条件,例如和,......
  • SQL vs NoSQL:系统设计中选择哪个数据库?
    SQLvsNoSQL:系统设计中选择哪个数据库?在设计系统时,您将面临的最关键的系统设计选择之一是选择合适的数据库管理系统(DBMS)。SQL与NoSQL数据库之间的选择可以极大地影响系统的整体性能、可扩展性和通常的成功。这就是为什么我们在系统设计中详细比较了SQL与NoSQL数据库,以帮助您......
  • 面试官:请说一下Mysql中count(1)、count(*)以及count(列)的区别?
    近期在Review项目代码时,发现同事们在查询MySQL行数时存在多样的方式,有的使用COUNT(1),有的用COUNT(id),还有人选择了COUNT(*)。这混杂的选择引发了我的思考。当然这三种count的方式也是众说纷纭,其中最大的分歧点就是COUNT(*)和COUNT(1)查询性能上,有人觉得COUNT(*)需要转换为COUN......
  • MyBatis 源码系列:MyBatis 解析配置文件、二级缓存、SQL
    解析全局配置文件启动流程分析Stringresource="mybatis-config.xml";//将XML配置文件构建为Configuration配置类reader=Resources.getResourceAsReader(resource);//通过加载配置文件流构建一个SqlSessionFactoryDefaultSqlSessionFactorySqlSessionFactorysqlMapp......
  • 在阿里云服务器上部署mysql,初始化出现问题
    mysql初始化出现问题:解决:参考链接:https://www.cnblogs.com/Roobbin/p/17772445.htmlhttps://blog.csdn.net/qq_35896718/article/details/131803958libm.so.6、libc.so.6错误由于glibc版本较低导致,从错误来看至少需要2.28的版本先查询版本:ll|greplibc.so.6wgethttp......
  • Debug: mysql_real_connect failed: errno: , error
    [ERROR:mysql_real_connectfailed:errno:,error]kubectllogstransform-pod-name-nkubeflow-->INFO:absl:MetadataStorewithgRPCconnectioninitializedWARNING:absl:mlmdclientInternalError:mysql_real_connectfailed:errno:,error:ERROR:absl:......
  • MySQL事务
    MySQL事务是一个执行单元,在mysql中,对数据的一次操作或多次操作可以组合成一个事务,这些操作要么同时成功执行,要么同时失败。一、事务的性质事务有四个基本特性,通常被称为ACID属性。原子性(Atomicity):如果事务中的所有操作都成功,则事务被提交。如果事务中的任何操作失败,则事务......
  • Overview how does plpgsql function get executed
    TheSQLCREATEFUNCTIONprocess_orders()RETURNSvoidAS$$DECLAREcrecord;BEGINFORcINSELECT*FROMordersLOOPRAISENOTICE'Processing:%%',c.id,c.total;ENDLOOP;END;$$LANGUAGEplpgsql;createtableorders(idint,t......