外键约束

2023-11-06

概念

  • 一张表的一个字段受限于另外一张表的一个字段对应的值。这里涉及到两张表:被引用的表叫主表(父表),另外一张叫从表(子表)。
  • 它们的关系:主从表关系(父子表关系)
  • 子表:定义了外键的表

 外键的取值要么取父表中字段对应的值,要么取NULL值

 严重受限于父表

  • 父表:被引用的字段要具有唯一性(绝大多数都是用的父表的主键)

理论上是可以一张表里的一个字段引用另一个字段,但一般都是用两张表

外键的实现

  • 建立表:

先建立父表,后建立子表(因为子表要用到父表)

除非先不考虑外键(建完表后再加),表多的时候可以不考虑建表顺序。弊端:对数据要求很严格,一个垃圾数据都不能放

父表:

create table parent(
  id number primary key,
  name varchar2(30),

);

  

子表:

create table child(
  id number primary key,
  name varchar2(30),
  fid number constraint child_fid_fk references parent(id),
);

  • 插入数据:

一般先插入父表数据,再插入子表数据。除非把子表的外键值设置成NULL值,否则会出完整性错误

insert into child values(1, 'test1', 1);

 

要改为:先加入父表数据

insert into parent values(1, 'p1');
insert into parent values(2, 'p2');
insert into child values(1, 'test1', 1);

 

  • 删除数据

子表中有关联的数据,需要先删子表,后删父表。

select * from parent;

这里删除父表的id为2的是没关系的,只要没有子表和它关联就行

有关联的必须先删子表的数据,再删父表的数据

   

delete from parent where id=1;

 

  • 删除表

先删子表,后删父表

除非使用casecade  constraints  解除关联

drop table parent;

 

先删父表会出错:

有一个被foreign  keys关联的unique/primary  key的字段在表中

 

使用casecade  constraints解除关联就可以删掉父表

drop table parent cascade constranints;

外键的表级约束实现

父表:

create table parent(
  id number primary key,
  name varchar2(30),
);

 

子表:

create table child(
  id number primary key,
  name varchar2(30),
  fid number,
  constraint child_fid_fk foreign key(fid) references parent(id),
);

 

先建立表,后加外键

  • 子表s_emp :

里面有外键dept_id

  • 父表s_dept

查看脚本summit2_drop.sql发现:1270行

ALTER  TABLE s_emp
ADD  CONSTRAINT s_emp_dept_id_fk
FOREIGN  KEY (dept_id)  REFERENCES  s_dept(id);

级联删除和级联置空

  • 级联删除:

在外键的最后,加上on delete  cascade  就是级联删除

再删除主表数据时和主表关联的子表数据也会删除

  • 级联置空

在在外键的最后,加上on  delete  set null就是级联置空

再删除主表数据时,会把和主表关联的外键设置成NULL

演示:先删表,不管有没有

  (1)建立一张父表部门表

  • id number  primart  key  
  • name varchar2(30)
create table mydept(
  id nimber constraint mydept_pk primary key,
  name varchar2(30),
);

 

(2)建立一张子表  员工表

  • id number  primart  key  
  • name varchar2(30)
  • dept_id number  外键(关联到部门表)
  • salary varchar2(30)

    

create table mtemp(
    id number constraint myepm_id_pk primary key,
  name varchar2(30),
  salary number,
  dept_id number constraint myemp_depy_id_fk reference mydept(id) on delete cascade,
);

  

desc mtemp;

 

(3)分别向两张表中放入数据

部门表:

insert into mydept values(1, 'test1');
insert into mydept values(2,'test2');

 

select * from mydept;

 

员工表:

insert into mtemp values(1, 'empa', 5000,1);
insert into mtemp values(2, 'empb', 4500,1);
insert into mtemp values(3, 'empc', 5500,1);
insert into mtemp values(4, 'empd', 5800,2);
insert into mtemp values(5, 'empe', 5100,2);

 

select * from mtemp;

              提交数据:commit;

 

 (4)因为有on  delete cascade,所以删除父表中的id为1的部分是可以的,并不会因为有关联而删不掉。

delete from mydept where id=1;

 

select * from mydept;

 

select * from mtemp;

 

(5)如果换为on  delete set  null,所以删除父表中的id为1的部分是可以的,而子表的关联的相应部分置为空  

delete from mydept where id=1;

  

select * from mydept;

 

select * from mtemp;

注意:如果是windows写在.sql脚本里,则所有以上的代码包括commit都写入,再在cmd切到存放脚本的磁盘(如D)。

ftp传到服务器上(192.168.0.26)

  • 这里清屏用!cls
  • put  要传送的文件名把文件传送到服务器
  • @要执行的文件名执行文件
  • 在SQL>@/user/openlab/要执行的脚本文件

 

转载于:https://www.cnblogs.com/cjaaron/p/9216839.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

外键约束 的相关文章

  • STM32移植FreeRTOS的Tips

    转自 http bbs armfly com read php tid 7140 1 在FreeRTOS的demo文件夹中拷贝对应的FreeRTOSConfig h文件后 需要加入一行 define configUSE MUTEXES 1
  • Http协议和Https协议的区别

    Http协议我们就不多说了 这篇主要就是简单的提提Https协议 Https协议是基于Http协议开发的 它是一个安全的通信通道 用于客户端和服务器端进行信息的交换 它主要使用了安全套接字层 SSL 来来进行信息的交换的 简单的说它就是Ht
  • 【设计模式】用Java实现装饰模式

    一 装饰模式介绍与使用场景 装饰模式 Decorator Pattern 是一种结构型设计模式 它允许在不改变现有对象结构的情况下 动态地将责任附加到对象上 装饰模式通过将对象包装在装饰器对象中 形成一条装饰链 每个装饰器对象都可以在被装饰
  • QML笔记(六)之QML自定义信号的创建与使用

    一 前言 信号槽是Qt的核心所在 不管是对于QtWidgets还是QML都是 连接自带的信号槽很容易就就比较容易 但有时候自带的信号槽不能满足我们的业务需要 于是就需要自定义信号 在需要的时候扔出 然后处理 自定义信号的使用场景一般都是组件
  • 概率论与数理统计(一)随机事件,样本空间

    1 D 2 A 3 C 4 AD 5 正确答案 1 2 1 3 2 1 2 3 3 1 3 2
  • [seaborn] seaborn学习笔记7-常用参数调整Adjustment of Common Parameters

    文章目录 7 常用参数调整Adjustment of Common Parameters 1 主题设置 themes adjustment 2 颜色设置 Manage colors 3 轴的管理 Manage axis 4 边距调整 Man
  • Client-Initiated场景下的L2TP实验配置

    目录 LNS配置 配置业务 认证方案 配置认证域以及用户 配置VT接口
  • Idea关闭coverage

    别问我为何知道 手滑惹的祸 解决方式 一 Ctrl Alt F6 取消勾选 选择Show selected 二 点击右侧边栏Coverage 点击X 三 Run gt Hide coverage
  • 管螺纹如何标注_关于管螺纹

    管螺纹 管螺纹分为55 非密封管螺纹与55 密封管螺纹两种 55 非密封管螺纹 GB T7307 2001 不具有密封性 若要求此联结具有密封性 应在螺纹以外设计密封面结构 在密封面内添加合适的密封介质 利用螺纹将密封面锁紧密封 标记 圆柱
  • C语言 文本文件读取、写入与定位(详细介绍)

    目录 文本文件相关介绍 1 打开文件 2 文件的读取 1 fgetc 函数 2 fgets 函数 3 fscanf 函数 4 fread 函数 3 关闭文件 fclose FILE stream 4 文件的写入 1 fpuc 函数 2 fp
  • Unity空间变换基础

    Unity空间变换基础 模型空间 unity空间开始的起点 左手坐标系 模型空间是美术在制作模型的时候确定的 世界空间 unity 中最外围的坐标系 左手坐标系 世界空间转换到模型空间 需要使用 坐标系的转换 p c Unity3d数学基础
  • agx 安装ros opencv_基于paddledetection在ROS中搭建红绿灯检测控制车模运动(1)

    前言 本来想直接用百度智能车比赛的数据集训练 但是发现在ROS中搭建红绿灯模型和提供的数据集在颜色亮度外形上都有点差别 无奈从创建数据集开始 目录 基于paddledetection在ROS中搭建红绿灯检测控制车模运动 1 环境搭建准备以及
  • JVM中的方法区

    文章目录 JVM中的方法区 运行时数据区结构图 栈堆方法区的交互关系 方法区在哪里 方法区的基本理解 Hotspot中方法区的演进 设置方法区大小与OOM jdk7及以前 jdk8及以后 方法区的内部结构 class字节码文件中常量池 方法
  • 爬虫 数据可视化

    爬虫 可视化界面柱状图 交作业啦 最近在学习爬虫 由于基础性学习太慢 对于我这种急性子的人直接去 B站找了一个完整的例子直接上手做了 就是爬取一个页面的内容 并把爬取下来的数据可视化 用柱状图直观表示出来 直接上代码吧 import req
  • elasticsearch 基于ik分词器的分词查询和模糊匹配

    前言 elasticsearch 查询有很多关键字 查询的条件有固定格式 返回结果提示不明确 让ES使用起来有点不方便的感觉 ES查询方式很多 简单介绍几种使用点的 实用的 此处简单梳理一下最常用的查询 模糊匹配查询 类似 mysql 语法
  • 什么是SPD-Conv

    SPD Conv是一种深度学习模型的卷积层 SPD Conv卷积层的输入是一个浮点数组 表示一个对称正定矩阵 而不是像传统卷积层那样的多维图像数据 SPD Conv卷积层使用输入矩阵上的操作来执行卷积运算 而不是像传统卷积层那样使用权值矩阵
  • Ajax 和 PHP 实现验证码的实时验证

    我的个人博客 逐步前行STEP PHP的图像处理功能强大 做一张验证码图片也是非常简单的 但是 在实现实时验证时 确遇到了一个难题 我用nat123对我的电脑上的网站进行端口映射 实现了在外网访问 本来是采用cookie的方式用js对验证码
  • Vue使用原生JS实现锚点跳转滚动效果

    本文使用iView 左侧导航元素 div class project left div class project card 测试 div div 右侧滚动元素 div class result card div
  • linux下如何查看一个服务的安装路径

    ps u 系统用户名 进入linux的进程目录 proc 执行ls l 可以看到对应的进程目录 结果如下图所示 进入30058这个进程目录 执行 ls l 结果如下
  • 一个简单的Python网络爬虫教程

    网络爬虫是一种自动获取网页内容的程序 它可以从互联网上的网站中提取数据并进行分析 本教程将带您逐步了解如何使用 Python 构建一个简单的网络爬虫 注意 在进行网络爬虫时 请遵守网站的使用条款和法律法规 避免对目标网站造成不必要的负担 步

随机推荐

  • 关于实例分割的最新研究和进展,看这篇就够了!

    在计算机视觉领域 实例分割是一个很重要的研究主题 在地理信息系统 医学影像 自动驾驶 机器人等领域有着很重要的应用技术支持作用 具有十分重要的研究意义 本文综述基于实例分割的最新进展和发展历程 首先介绍了实例分割的基本逻辑 总结了目前主要研
  • MATLAB——生成周期矩形信号

    题目 周期矩形信号 一连续周期矩形信号频率为10Hz 信号幅度在 1 1之间 脉冲宽度与周期的比例是1 2 用128点采样 显示三个周期的信号波形 代码解释 f1 10 将频率赋值为 10 Hz 即信号的周期为 1 10 秒 Um 1 将幅
  • Qt使用多线程的一些心得——1.继承QThread的多线程使用方法

    文章目录 1 摘要 2 Qt多线程方法1 继承 QThread 2 1写一个继承于 QThread 的线程 2 2 QThread的几个函数quit exit terminate函数 2 3 正确的终止一个线程 2 4 如何正确启动一个线程
  • liu.四则运算库,模拟第三方库的编写,测试

    1 四则运算库 def add a b return float a b def subtracr a b return float a b def multipy a b return float a b def divide a b r
  • 2023高教社杯数学建模C题思路分析 - 蔬菜类商品的自动定价与补货决策

    1 赛题 在生鲜商超中 一般蔬菜类商品的保鲜期都比较短 且品相随销售时间的增加而变差 大部分品种如当日未售出 隔日就无法再售 因此 商超通常会根据各商品的历史销售和需 求情况每天进行补货 由于商超销售的蔬菜品种众多 产地不尽相同 而蔬菜的进
  • CSS技巧,CSS设置任何元素宽度随内容增加自动变宽

    宽度随内容增加自动变宽的问题 看起来简单 但网上各种找不到 其实感觉以前在布局的时候在哪里遇到过自动变宽 想了好久好像记得只有用table布局的时候吧 但是不可能哪里都用table 如果用层那怎么办呢 然后又发现了一个熟悉 display
  • 解决requests.exceptions.SSLError: HTTPSConnectionPool(host=xxxxx‘, port=443): Max retries exceeded

    问题描述 使用scrapy框架时报错SSL 于是另起一个文件 使用requests 报错requests exceptions SSLError HTTPSConnectionPool host xxx port 443 Max retri
  • Leetcode 121. 买卖股票的最佳时机

    买卖股票的最佳时机 给定一个数组 它的第 i 个元素是一支给定股票第 i 天的价格 如果你最多只允许完成一笔交易 即买入和卖出一支股票一次 设计一个算法来计算你所能获取的最大利润 注意 你不能在买入股票前卖出股票 示例 1 输入 7 1 5
  • 详解Unicode字符集以及字符编码实现(一)

    在日常生活中 我们经常会碰到打开一个文件 但是文件内容乱码的问题 比如我想看 西游记 这部小说 下载链接 https m ijjjxs com txt dl 35 12585 html 点击TXT电子书下载 很快就会下载完成 但是使用电脑自
  • npm ERR! chromedriver@2.46.0 install: `node install.js`

    vue项目npm install 时报错 如下 该问题是vue cli脚手架的一个bug 原因是chromedriver的部分文件被国内网络给墙掉了 无法下载完整的chromedirver包 解决办法 npm install chromed
  • 极限导数练习题

    f x sinx 2 x 当x趋近于0时 f x 的极限是0 f x sin x 2 x 当x趋近于0时 f x 的极限是0 f x sin 2x x 当x趋近于0时 f x 的极限是2
  • 利用python操纵数据库--数据写入与tkinter实现界面查询

    在日常练习sql的时候 又找不到好的线上数据库 这个时候不如自己下载一个mysql 但是数据批量写入呢 就可能是一个问题 这时候 利用python脚本批量写入即可 同时每次运行脚本也是一个麻烦的事 可以实现窗口输入 写到数据库中 这将在后面
  • centos7 开启网络连接

    1 当我们发现无法联网时 我们运行下面命令或者ping命令 ip addr 结果没有显示局域网的IP地址 2 我们去修改网卡配置文件 把网络连接打开 cd cd etc sysconfig network scripts vi ifcfg
  • 数据的清洗和检验(完全去重,缺失值的填充)

    一 完全去重 1 打开kettle工具 新建转换 gt 创建CSV文件输入控件 gt 1唯一行 哈希值 控件 gt 跳连接线 2 配置CSV文件输入控件 gt 进入CSV文件控制页面 如图所示 3 点击浏览 gt 选择完去重的文件merge
  • Hadoop学习笔记之在Eclipse中远程调试Hadoop

    转载地址 http itindex net detail 37273 hadoop E5 AD A6 E4 B9 A0 E7 AC 94 E8 AE B0 插件 话说Hadoop 1 0 2 src contrib eclipse plug
  • 记录一次cpu 100%线上问题排查

    功能问题 通过日志 单步调试相对比较好定位 性能问题 例如线上服务器CPU100 如何找到相关服务 如何定位问题代码 更考验技术人的功底 最近做项目时碰到线上某台实例不时出现CPU 100 的报警 线上部署了若干tomcat实例 即若干垂直
  • javase部分持续更新中...

    项目保存路径尽量不要出现中文 不要直接在磁盘目录下保存文件 注释 选中 Ctrl 关键字 学一个记一个 具有特殊含义的字 常量 程序运行过程中不可以改变的量 变量 在程序运行中可以改变的量叫做变量 int a 12 System out p
  • Unity 动画系统(Animation,Animator,Timeline)

    文章目录 1 Animation 1 1 创建Animation 1 2 Animation 属性 2 Animator 2 1 Animator 组件 2 2 Animation 状态 2 3 状态控制参数 2 4 代码中控制状态 3 代
  • vue&javascript点击空白处隐藏内容

    vue 1 创建一个按钮和容器 按钮控制显示和隐藏 容器存放内容 div 显示 div div 代码 div 2 编写自定义指令
  • 外键约束

    概念 一张表的一个字段受限于另外一张表的一个字段对应的值 这里涉及到两张表 被引用的表叫主表 父表 另外一张叫从表 子表 它们的关系 主从表关系 父子表关系 子表 定义了外键的表 外键的取值要么取父表中字段对应的值 要么取NULL值 严重受