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

article/2025/10/6 0:50:02

一:首先是外键的定义

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

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

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

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

 

举个例子:

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

 

四:外键的作用

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

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

五:外键约束

Mysql 下,外键设置:

on delete  规则:

1、CASCADE:级联

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

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


2、NO ACTION(非活动,默认)、RESTRICT:约束/限制
  当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)
3、SET NULL
    当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(,一样是外键表约束主键表,不过这就要求该外键允许取null)。

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

六.实际应用

对象模型中的数据如下:

 

package org.model;  public class Student {  
private String stuNum;  
private String stuName;  
<span style="color:#FF0000;">private Depart depart;</span>  
public String getStuNum() {  return stuNum;  
}  
public String getStuName() {  return stuName;  
}  
public Depart getDepart() {  return depart;  
}  
public void setStuNum(String stuNum) {  this.stuNum = stuNum;  
}  
public void setStuName(String stuName) {  this.stuName = stuName;  
}  
public void setDepart(Depart depart) {  this.depart = depart;  
}  } 

 

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

 

若要通过外键查询:

  

<span style="font-size:18px;"> Query query=session.createQuery("from Student as stud where <span style="color:#FF0000;">stud.depart.departNum=:num</span>");  query.setString("num","890");</span>  

 

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


http://chatgpt.dhexx.cn/article/DFrQyNQ5.shtml

相关文章

数据库的外键:主表与从表

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Mysql的外键是什么&#xff0c;有何用&#xff1f;代码演示总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 最近在学习数据库&…

【数据库】外键的作用

前言 说到外键&#xff0c;一般就会牵扯出约束。不谈约束&#xff0c;起始外键就是一个普通的字段&#xff08;Column&#xff09;&#xff0c;起到一个关联的作用。 先把约束放一边&#xff0c;看看外键有哪些作用。 建立表中记录的一对一的关系 学生表&#xff1a; 手机表…

数据库之外键

外键约束&#xff08;FOREIGN KEY&#xff09;用来在两个表的数据之间建立连接&#xff0c;它可以是一列或者多列。一个表可以有一个或多个外键。 &#xff08;1&#xff09;外键定义&#xff1a;一张表中某一列的值使用的是另外一张表的主键值。这个列就被称为外键列。 &#…

数据库mysql表怎么设置外键_如何设置数据库中的外键

展开全部 创建数据库时就是有主键的创建了主键,但是表之间的关系没有联系,要建数据库关系图只e69da5e887aa62616964757a686964616f31333365653739有主键没有外键时不行的。 建外键的前提是此外键必须是另外一个表的主键。建外键的步骤: 第一步、打开要建外键表的设计器,右击…

数据库表外键设置

http://blog.csdn.net/pplsunny/article/details/7747340 我们在建立数据库的时候&#xff0c;需要为每张表指定一个主键&#xff0c;所谓主键就是能够唯一标识表中某一行的属性或属性组&#xff0c;一个表只能有一个主键&#xff0c;但可以有多个候选索引。因为主键可以唯一标…

数据库——外键的作用

我们用一个比较实际的例子来描述问题&#xff0c;并讲解外键作用&#xff1a; 当我们在网上购物的时候&#xff0c;我们有我们的帐号&#xff0c;还有我们所在不同地方的地址信息如公司&#xff0c;学校&#xff0c;家里&#xff0c;或者给亲戚朋友送个礼物&#xff0c;收货人…

mysql数据库添加外键的四种方式

文章目录 一、添加外键的四种方式二、文档下载 一、添加外键的四种方式 1、 建表时直接使用FOREIGN KEY&#xff0c;这种方式外键名称自动生成。如下图。 FOREIGN KEY (user_id) REFERENCES t_user(id)2、 建表时使用CONSTRAINT指定外键名称。如下图。 CONSTRAINT fk_studen…

彻底理解数据库外键

外键的定义 如果 公共关键字在一个关系中是 主关键字&#xff0c;那么这个 公共关键字被称为另一个关系的 外键。由此可见&#xff0c;外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表&#xff0c;具有此外键的表被称为主表的从表。外键又称作外…

什么是数据库外键?

外键 Teacher_id就是student的外键 Teacher是主表&#xff0c;student是子表&#xff08;从表&#xff09; 外键就是一个表中的一个字段引用了另一个表中的主键&#xff0c;引用的表叫做子表&#xff0c;被引用的表叫做主表&#xff0c;外键是一种约束&#xff0c;描述的是表之…

数据库常用命令之外键(foreign key)多对多(总结,基础)

我是小白&#xff0c;刚接触MySQL不久&#xff0c;现阶段正在学习&#xff0c;为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅&#xff0c;评论或者私发我错误的地方哦&#xff0c;谢谢大家&#xff0c;嘿嘿~ 外键&#xff08;foreign key&#xff09; 引言&…

MySQL中的外键(foreign key)

阅读目录 前言一、外键作用及其限制条件1 外键的定义2 外键的作用3 外键创建限制 二、外键创建方法1 创建外键的语法2 举例&#xff08;1&#xff09;创建两张表&#xff08;2&#xff09;创建外键&#xff08;3&#xff09;查看表结构 三、验证外键作用1 先向主表中添加数据2 …

显示gsensor即时数据的apk 用gsensor来判断手机的静和动

即时显示gsensor的数据&#xff0c;可以在调试重力感应器驱动和测试手机性能时起到很好的作用。类似的&#xff0c;SensorEventListener还可以用在其他感应器的场合&#xff0c;比如光感应、地磁感应。这里用两种方式来完成读取并显示gsensor数据的功能&#xff0c;一种是activ…

老化测试Gsensor失败分析

在log中搜Gsensor可以看到如下&#xff1a; 在Y:\1\18045c1老化\bug127302c1_slog\last_log\2015-01-01-06-19-23\android\0-events-06-19-24.log中搜到如下&#xff1a; 行号 500 - 01-01 06:36:08.996 664 2050 I am_create_activity: [0,509924699,15,com.wingtech.runin…

MTK 9.0平台调试gsensor

MTK 9.0平台调试gsensor ----型号为&#xff1a;stk8baxx 1 查看原理图可以知道stk8baxx重力传感器 使用i2c1通道进行通讯&#xff0c;由于该重力传感器是不使用中断模式的进行触发的&#xff0c;所以不需要配置中断引脚。由此可以配置stk8baxx重力传感器的dts dts文件配置如…

APK无法识别gsensor问题剖析

APK无法识别gsensor问题的原因有很多&#xff0c;这里只是提供一条思路&#xff0c;解决现有项目遇到的问题。 1、确保驱动层可以工作。 2、打印LOGCAT数据&#xff0c;分析sensorservice流程 1、移植流程&#xff1a; 步骤&#xff1a;移植gsensor驱动&#xff0c;mc3413&am…

mtk平台gsensor,msensor方向确定方法

在gsensor和msensor驱动调试中&#xff0c;一个很重要的参数就是direction。 direction与芯片、layout和结构三者结合&#xff0c;才能最终确定该参数值。 mtk平台中该参数的示意图 在mtk10.0的kernel中提供了一个简单的调试接口&#xff0c;用于确认该参数值。 内核节点 /…

Gsensor驱动概述

本文以Bma250驱动为例子&#xff0c;详细介绍Gsensor设计的一个模板。 gsensor驱动在系统中的层次如下图所示&#xff1a; 图中包含三个部分&#xff1a;hardware,driver, input&#xff1a; n Hardware&#xff1a;其实我们可以认为Gsensor也是一个I2C设备。整个Gsens…

MTK平台Android Gsensor数据校准与数据获取

http://blog.csdn.net/morixinguan/article/details/76850600 上节,写WIFI MAC地址的时候我们已经知道,MTKAndroid系统的Gsensor校准的数据其实也是存储在NVRAM中的,Gsensor隶属于传感器系统架构。 接下来我们来看下Gsensor校准的基准图像: 那么如何来校准Gsensor的X,Y,Z三…