SQL编程:外键约束

2023-11-10

外键(foreign key)

一个表中的foreign key指向另一个表中的unique key(唯一约束的键)

对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表就是从表(子表)。

外键约束

foreign key约束用于预防破坏表之间连接的行为,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。【主要目的是确保表的数据的完整性,唯一性】

主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或者多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。

定义外键时,需要遵守下列规则:

  • 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
  • 必须为主表定义主键。
  • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
  • 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
  • 外键中列的数目必须和主表的主键中列的数目相同。
  • 外键中列的数据类型必须和主表主键中对应列的数据类型相同。

上段截取自http://c.biancheng.net/view/2441.html

实例:

题目描述

在audit表上创建外键约束,其emp_no对应employees_test表的主键id。(以下2个表已经创建了)

1

2

3

4

5

6

7

8

9

10

11

12

CREATE TABLE employees_test(

ID INT PRIMARY KEY NOT NULL,

NAME TEXT NOT NULL,

AGE INT NOT NULL,

ADDRESS CHAR(50),

SALARY REAL

);

 

CREATE TABLE audit(

EMP_no INT NOT NULL,

create_date datetime NOT NULL

);

方法一:创建表时添加外键约束。

 

drop table audit;
create table audit
(
    emp_no int not null,
    create_date datetime not null,
    foreign key(emp_no)
    references employees_test(id)
);

方法二:在修改表时添加外键约束,采用alter语句。

语句结构:

alter table table_nm add constraint constraint_name
foreign key table_a(col) references table_b(col);
alter table audit
add constraint 
fk_emp_no
foreign key
audit(emp_no)
references 
employees_test(id);

删除外键约束语法格式:

ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;

 

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

SQL编程:外键约束 的相关文章

随机推荐

  • Arduino UNO R3

    Arduino 常见型号 当然还有 LilyPad 附图 最常见的自然是UNO 最新版是第三版R3 国内也有一些改进的板子 我用的是一般的板子 拿到货也只能默默了 简介 The Uno is a microcontroller board
  • SyntaxError: unexpected EOF while parsing

    报错在eval 函数 正确代码段 with open COCO train json r as f data f readline data data strip split del data 0 del data 1 for i in d
  • 华为HCIA(五)

    Vlan id 在802 1Q中 高级ACL不能匹配用户名和源MAC 2 4G频段被分为14个交叠的 错列的20MHz信道 信道编码从1到14 邻近的信道之间存在一定的重叠范围 STA通过Probe获取SSID信息 Snmp报文 网络管理设
  • Java-1.1

    题目描述 编写程序 显示Welcome to Java Welcome to Computer Science Programming is fun 代码 public class PrintfMessage public static v
  • 首次访问(域名)过程

    1 解析出域名对应的ip地址 先知道默认的网关 使用arp协议获取默认网关的mac地址 组织数据发送给默认网关 ip还是dns服务器的ip但是mac地址是默认网关的mac地址 默认网关拥有转发数据的能力把数据转发给路由器 路由器根据自己的路
  • 网络编程之字节序

    字节序 计算机数据表示存在两种字节顺序 网络字节顺序NBO Network Byte Order 与主机字节顺序HBO Host Byte Order 或者是大端模式和小端模式 网络字节序 大端模式 网络字节顺序NBO 按从高到低的顺序存储
  • 普通人学Python有意义吗?

    普通人学Python有意义吗 Python作为一种跨平台的计算机程序设计语言 近些年来越来越受到企业和IT从业者的青睐 那么 普通人是否需要学习Python呢 学会Python有什么意义呢 今天小编就和大家聊一聊这个话题 Python有效提
  • 拿手机干什么

    前段时间在知乎网上收集了一下人们主要拿手机干什么 收到的反馈是 除了记事本 短信聊天 QQ聊天 回复邮件 发微博 回复帖子需要简短敲字外 大部分就是索取信息 看来无线移动上网 屏幕增大 键盘消失是需求大趋势 因为索取信息比提交数据要多 提交
  • wayland 之opengl es

    EGL 是 OpenGL ES 渲染 API 和本地窗口系统 native platform window system 之间的一个中间接口层 它主要由系统制造商实现 使用 EGL 绘图的基本步骤 Display EGLDisplay 是对
  • html里link使用方法,html的link标签怎么使用?

    html的link标签怎么使用 link标签是放在与之间的 把link放入这对符号中间 lt gt 写成这样 然后在link后面添加属性和属性对应的值 新手同学看到这里估计一头雾水 别担心 如乐老师举个例子你就懂了 比如 这段代码的作用是给
  • logback 不同类的日志打印在不同的文件中

    在Spring Boot中 您可以使用Logback为不同的类配置不同的日志文件 以下是一个基本的 logback xml 配置示例 展示了如何为两个类 com example Class1 和 com example Class2 配置不
  • MySql:局域网和权限用户管理

    MySql 5 6 XP 5 7 win7 添加用户和设置局域访问权限操作 请在 http sourceforge net 下载MySql Control Center 不是安装版本 use mysql select from user u
  • OPEN CV 环境配置 VS 2022(超详细+图解)

    先来说明一下写这篇博客的初衷吧 由于前段时间在和一位大佬的交流之中 他提出了一个建议 说叫我平时可以自己做一些嵌入式开发项目什么的 有极大的利处 我就跟着bi站的老师 华清创客学院 开始学习 但是老师的教程是用虚拟机创建一个linux系统
  • 人事管理系统 数据流图_大学毕业设计-宾馆管理系统

    目录 第一章 绪论 1 1 1概述 1 第二章 宾馆管理系统系统分析 1 2 1可行性分析 1 2 2 需求分析 2 第三章 系统概要设计 2 3 1 功能需求 2 3 2 主要功能 3 3 3 系统开发目的 3 3 4 运行环境 3 3
  • 异步日志的实现

    异步日志的实现 异步管理类 异步工厂类 登录校验 登录 异步管理类 采用单例模式的静态饥饿加载 利用空间换时间 提高效率 使用异步延迟任务线程池 通过其内直接创建饥一个static对象 形成饥饿加载 以达到记录日志时的单例模式 import
  • Android-Studio-常用配置和快捷键

    原文链接http www open open com lib view open1466732917214 html articleHeader1 http www jianshu com p bc8f6bfe12c6 以下直接在 Sett
  • VS版本、GCC版本与C++版本的对应关系

    做嵌入式开发经常遇到一些编译器和C 版本不匹配的问题 现整理如下 目前C语言的标准有 C89 ANSI C C90 C95 C99 ISO C C11 C1x 目前C 语言的标准有 C 98 C 03 对98小幅修改 C 11 全面进化 C
  • C语言与C++,C#究竟是什么关系?

    简单来说 C 就像是C语言的亲弟弟 而C 就是他们二者的远房亲戚 其实它更像是Java的表兄弟 小编c 学习群825414254获取c 一整套系统性的学习资料还有数十套pdf这三门语言都是十分优秀的编程语言 也都有很高的运行效率 这三种编程
  • Gradle是个啥东东?

    如何通俗地理解 Gradle 我以前一直用 Eclipse with ADT 来开发Android 项目 而且对它的基础的原理掌握不深 直接上手开发的 没有去考虑太多的东西 现在手头上有一个新的项目要使用到Android Studio 我早
  • SQL编程:外键约束

    外键 foreign key 一个表中的foreign key指向另一个表中的unique key 唯一约束的键 对于两个具有关联关系的表而言 相关联字段中主键所在的表就是主表 外键所在的表就是从表 子表 外键约束 foreign key约