外键及外键约束理解

外键及外键约束理解转自 https www cnblogs com chenxiaohei p 6909318 html 数据库 外键及其约束理解 一 首先是外键的定义 nbsp nbsp nbsp nbsp nbsp nbsp 如果一个字段 X 在一张表 表一 中是主关键字 而在另外一张表 表二 中不是主关键字 则字段 X 称为表二的外键 换句话说如果关系模式 R1 中的某属性集不是自己的主键 而是关系模式 R2 的主键 则该属性集称为是关系模式 R1 的外键

转自:https://www.cnblogs.com/chenxiaohei/p/6909318.html

数据库(外键及其约束理解)

一:首先是外键的定义

       如果一个字段X在一张表(表一)中是主关键字,而在另外一张表(表二)中不是主关键字,则字段X称为表二的外键;换句话说如果关系模式R1中的某属性集不是自己的主键,而是关系模式R2的主键,则该属性集称为是关系模式R1的外键。

二:主键表和外键表的理解

(1)以公共关键字作主键的表为主键表(父表,主表)

(2)以公共关键字作外键的表为外键表(从表,外表)

 

举个例子:

这里有2张表(student和depart)学生表和院系表,这里的字段departNum就是学生表的外键,这里的外键表是学生表,主键表是院系表。

外键及外键约束理解

 外键及外键约束理解

四:外键的作用

各种书籍和网上的资料大多都是抽象空洞的解释:保证数据的完整性和一致性。

个人对此的理解与接下来的外键约束一起讲。

五:外键约束

1、CASCADE:级联

   (1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。

   (2)以上面的例子将就是,假如院系表中的某个院系被删除了,那么在学生表中要想查询这个被删除的院系号所对应的院信息就会报错,因为已经不存在这个系了,所以,删除院系表(主键表)时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除学生表中的记录,并不影响院系表中的数据,你查询院系号也能正确查询。所以删除外键表中的数据并不影响主键表。

NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

六.实际应用

对象模型中的数据如下:

 

这里设计对象模型时的属性并不是设计成departNum这个外键,而是整个Depart对象,这样做的好处是在查询时,就不用通过外键或者连接查询再多查询一次

 

若要通过外键查询:

 Query query=session.createQuery("from Student as stud where stud.depart.departNum=:num"); query.setString("num","890"); 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176517.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午9:44
下一篇 2026年3月26日 下午9:44


相关推荐

  • MySQL中添加或插入语句(Insert)的几种使用方式

    MySQL中添加或插入语句(Insert)的几种使用方式1 Intsert 简写方式插入数据 1 先看一下表中有那些数据 在这里插入图片描述 https img blog csdnimg cn png x oss process image watermark type ZmFuZ3poZW5n shadow 10 text aHR0cHM6Ly9i

    2026年3月19日
    2
  • css背景渐变透明和方向

    css背景渐变透明和方向css 背景颜色渐变透明左到右 background image linear gradient toleft red rgba 255 0 0 1 右到左 background image linear gradient toright red rgba 255 0 0 1

    2026年3月18日
    1
  • php发起options请求_如何避免options请求?

    php发起options请求_如何避免options请求?我用 vue cli 做一个后台 要跨域访问微信服务器 获取统计数据我用 axios 发送 post 请求 然后浏览器先发了一个 options 请求然后报错 然后 我看阮一峰的跨域资源共享 CORS 详解 如果请求字段超出如下内容 就是非简单请求 浏览器就先发 option 试探服务器是否允许跨域 1 请求方法是以下三种方法之一 HEADGETPOST 2 HTTP 的头信息不超出以下几种字段 AcceptAc

    2026年3月19日
    2
  • 手动安装Anaconda环境变量

    手动安装Anaconda环境变量手动安装 Anaconda 环境变量安装 Anaconda 后 在命令行执行 python 命令或 conda 命令会报错无法找到此时就需要我们手动添加环境变量 1 在运行中输入 sysdm cpl 打开系统属性 2 打开系统属性 高级选项 找到最下面的系统环境变量 3 添加 path 变量值 如下图 以上就是本文的全部内容 可以通过以下命令分别测试 python Vcondaupdate

    2026年3月18日
    2
  • 零基础掌握Grok-2部署:打造个人专属AI助手的完整教程

    零基础掌握Grok-2部署:打造个人专属AI助手的完整教程

    2026年3月15日
    11
  • webpack的性能优化_webpack不是内部或外部命令

    webpack的性能优化_webpack不是内部或外部命令webpack版本过高,会出现很多问题,因此可以降低版本高度1.可以直接覆盖原版本,可以输入`cnpmiwebpack需要降低的版本-g比如我们要降低到’3.6.0’’cnpmiwebpack@3.6.0-g’2.卸载当前版本,在重新下载需要的版本卸载命令:’npmuninstallwebpack-g’如果是局部安装,也可以在文件夹中找到node-modules中webpack模块删除。安装命令:’npminstallwebpack@3.6.0-g’

    2022年8月10日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号