MySQL外键(foreign key)使用及说明详解

2023-11-01

外键也称之为外键约束: foreign key

外键: 外面的键, 一张表的一个字段(非主键)指向另外一个表的主键, 那么该字段就称之为外键.

外键所在的表称之为子表(附表); 外键所指向的主键所在的表称之为父表(主表)

一、增加外键
将一个表的字段与另外一张表的主键进行关联(实体与实体之间的联系)

增加外键有两种形式

方案1: 在创建表的时候就增加外键: 在表字段之后使用foreign key

foreign key(外键字段) references 主表(主键);

在这里插入图片描述
在这里插入图片描述
方案2: 在创建表之后增加外键: 指定外键名字

alter table 表名 add constraint 外键名 foreign key(外键字段) references 父表(主键字段)
在这里插入图片描述
查看指定的外键名
在这里插入图片描述
外键增加的基础条件: 外键字段必须与引用表(父表主键)的数据类型严格保持一致在这里插入图片描述
二、删除外键
外键不能被修改,只能先删除后新增.
alter table 表名 drop foreign key 外键名;
在这里插入图片描述
三、外键作用
外键也称之为外键约束: 主要作用在于对数据进行约束.

约束1: 外键对子表的数据写操作约束: (增加和更新): 如果子表中插入的数据所对应的外键在父表不存在: 不能成功.
在这里插入图片描述
约束2: 外键对父表也有数据约束: 当父表操作一个记录,但是该记录被子表所引用的时候,那么父表的操作将会被限制(更新: 主键和删除)
在这里插入图片描述
四、外键约束
外键约束: 可以通过在建立外键的时候, 对外键进行约束控制.

约束控制有三种模式

严格模式: district(默认的)
置空模式: set null,对子表的限制: 当父表删除一个被子表引用的记录的时候,会自动的将子表中对应的父表引用(外键)设置成NULL
级联模式: cascade, 级联操作: 当父表对一个被子表引用的数据进行操作的时候,会自动的连带更新子表对应的数据.(更新操作)
模式设定语法: 在外键增加之后(foreign key(外键字段) references 父表(主键)),增加on关键字, 指定操作方式和约束模式. 一个常用的约束模式如下
on update cascade – 级联操作: 父表更新,子表跟着变
on delete set null; – 父表删除, 子表置空
在这里插入图片描述
更新父表主键在这里插入图片描述
删除父表记录在这里插入图片描述
外键要增加成功的前提条件

子表的外键字段的数据类型必须与父表的主键的字段类型要一致
如果想要在父表进行数据删除的时候, 子表对应的模式为置空: set null,前提是子表对应的外键字段允许为空
如果是在表创建之后增加外键: 一定要考虑表中的数据是否满足外键条件

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

MySQL外键(foreign key)使用及说明详解 的相关文章

  • 在docker中使用MySQL数据库设置aspnetcore

    我正在尝试设置一个 docker compose 文件 其中包含 asp net core mysql 数据库和 phpmyadmin 的容器 设置我的 mysql 服务器没有问题 我可以使用 phpmyadmin 访问它 我的 asp n
  • 将 UPDATE 转换为 INSERT INTO ON DUPLICATE KEY UPDATE 语句

    我有这个 UPDATE MySQL 语句 效果很好 UPDATE table1 Inner Join table2 ON table2 id table1 gw id SET table1 field1 1 table1 field2 2
  • MySQL+子串怎么做? + 替换?

    我不太擅长 SQL 希望能够变得更好 我在尝试执行某些表操作时遇到一些麻烦 我希望能够从下面的 ProgUID 列中选择子字符串 就像是 SUBSTRING table ProgUID 3 12 这将为我提供 ProgUID P CAMVE
  • 通过连接从两个表中删除?

    我有两个表如下 tbl1 tbl2 id article id title image whole news tags author older datetime 其中 tbl1 id gt tbl2 article id 如何从两个表中删
  • mySQL MATCH 跨多个表

    我有一组 4 个表 我想对其进行搜索 每个都有全文索引 查询可以使用每个索引吗 CREATE TABLE categories id int 5 unsigned NOT NULL auto increment display order
  • ActiveRecord3死锁重试

    Rails 3 或 ActiveRecord 3 是否有任何插件可以复制旧版本死锁重试 http agilewebdevelopment com plugins deadlock retry插入 或者 该插件仍然适用于 Rails 3 吗
  • 显示表 FULLTEXT 索引列

    我希望运行一个查询 该查询将返回表中全文索引的列列表 该表采用 MyISAM 格式 我将使用 php 来构建查询 理想情况下 我会运行查询 它会返回信息 以便我可以构造一个以逗号分隔的列字符串 例如 名 姓 电子邮箱 这在 MySQL 中可
  • 为什么 MySQL 创建带有 _seq 后缀的表?

    我创建了一个 InnoDB 表 名为foo在 MySQL 中 一旦我对表执行插入操作 我就会看到另一个表foo seq被建造 如果我删除自动生成的表 它会在下一次插入后出现 是什么原因造成的 听起来像是正在创建一个序列 您是否有自动生成的主
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 比特纳米。重置mysql根密码

    我如何重置 MySQL 中的 root 密码和帐户 因为我按照如何为其他服务器授予权限的说明操作 并且意外地将 root 用户 Mysql 绑定到其他 IP 地址 现在看来我无法在 localhost 上以管理员身份登录 Thanks 您有
  • PDO PHP 连接,致命错误

    我的连接类 firstcode php class DB functions public db function construct try db new PDO mysql localhost dbname xxx charset ut
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • 如何从shell脚本自动登录MySQL?

    我有一个 MySQL 服务器 其中有一个用户和密码 我想在 shell 脚本中执行一些 SQL 查询而不指定密码 如下所示 config sh MYSQL ROOT root MYSQL PASS password mysql sh sou
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb

随机推荐

  • Java,Enum里定义属性和方法

    最近的项目用到了大神写的统一返回码的代码 ErrorCode java 统一6位 异常码 author Administrator public enum ErrorCode global OK 000000 操作成功 ERROR 0000
  • 子类化QListWidget实现自定义拖拽功能.

    我们经常会碰到这样的一个问题 我们想把其他地方选中的文本 直接通过拖拽移动到一个控件中 从而实现方便添加项的功能 这里我们以QListWidget作为例子 来实现这么一个功能 其他地方的文本可直接拖拽进QListWidget中 且QList
  • pandas to_sql详解

    pandas to sql api的使用文章已经很多了 但是都只是简单介绍了怎么使用 一些细节问题没有介绍到 这里我们增加说明一些细节问题 1 列的对应 2 多值插入 3 批量插入 api说明 照常 我们对api参数也做一下详细的介绍 也就
  • 第一次使用markdown编辑器_交换两个数组

    交换两个数组 将两个整形变量进行交换可引入第三个变量 数组的交换也可以这样做 int main int arr1 1 2 3 定义两个数组 int arr2 2 3 4 int i 0 int tmp 0 定义第三个数组用于交换 for i
  • 12-控制Pawn类移动与调整视角 UE4 C++

    在上一节 11 控制Pawn类移动增加镜头摇臂 已经完成了Pawn的移动和镜头摇臂功能 本节继续增加移动镜头视角的功能 首先在MyPawn h中增加如下代码 void CameraPitch float Value 用于调整抬头低头 voi
  • cocos2d-x下c++调用lua函数

    首先需要lua中的函数句柄传到c 层 通过tolua 将c 类绑定到lua后 构造该c 类时传入lua函数句柄即可 在c 层回调lua函数的具体代码如下 void notifyLua int type int value CCLuaStac
  • C++ sort()排序函数用法详解

    include
  • python自动化操作_文件和目录的批量重命名操作

    一 文件和文件夹的批量重命名 1 文件重命名使用os库里的rename函数 os rename old new 二 复杂路径中的文件重命名 1 注意文件夹修改的时候 会只修改最外层的文件夹 因为改了后就变了名字 找不到啦 解决办法 加top
  • JAVA在线考试系统

    一 项目简介 随着互联网迅速发展 人们的生活已经越来越离不开互联网 人们足不出户就可以工作 买卖 学习等 对于在校学生 通过网络教育不仅可以随时进行网络学习 也可以根据学习的情况自我检测 有利于学生高效 快捷地掌握所学的知识 本系统预设计的
  • 五、传输层(三)TCP

    目录 3 0 TCP特点补充 3 1 TCP报文段首部格式 3 2 TCP连接管理 3 2 1 三报文握手 3 2 2 四报文挥手 3 3 TCP的流量控制和可靠传输 3 4 TCP拥塞控制 3 4 1 接收窗口 拥塞窗口 发送窗口关系 3
  • STM32G070 onchip移植FlashDB

    一 Onchip Flash 特性 在STM32G070 的片内 Flash写入数据之前必须先对目标地址进行擦除后才能写入数据 数据写入 G070 Flash 写入数据必须保证8字节对齐 一次写入双字数据64bit 8Byte 数据读取 使
  • 从零开始实现SSD目标检测(pytorch)(一)

    目录 从零开始实现SSD目标检测 pytorch 第一章 相关概念概述 1 1 检测框表示 1 2 交并比 第二章 基础网络 2 1 基础网络 2 2 附加网络 第三章 先验框设计 3 1 引言 3 2 先验框设计 3 3 先验框可视化 3
  • Unity APK在应用宝上架因为提前访问Android_ID被拒

    Unity启动时获取了设备信息 其中包括Android id 这在安全审查中不被允许 需要在同意隐私协议之后才允许调用 1 个推SDK Bugly等SDK的API会访问到ANDROID ID 通过调整逻辑放在同意隐私协议之后初始化 2 提前
  • python画柱状图并数值显示

    usr bin env python3 coding utf 8 Author yudengwu Date 2020 6 12 import matplotlib matplotlib use TkAgg from pylab import
  • MySQL中的锁

    第15章 锁 事务的隔离性由这章讲述的锁来实现 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制 在程序开发中会存在多线程同步的问题 当多个线程并发访问某个数据的时候 尤其是针对一些敏感的数据 比如订单 金额等 我们就需要保证这个数
  • 初探KVM虚拟化技术:新手指南

    首先了解一下虚拟化的概念 虚拟化是指对资源的逻辑抽象 隔离 再分配 管理的一个过程 通常对虚拟化的理解有广义狭义之分 广义包括平台虚拟化 应用程序虚拟化 存储虚拟化 网络虚拟化 设备虚拟化等等 狭义的虚拟化专门指计算机上模拟运行多个操作系统
  • 2022年年终总结及2023年展望-----学习总是对的,机会善于光顾有准备的头脑

    2022年 是比较波折的一年 想到哪里写到哪里吧 我感觉 之所以没被打倒 还是因为多学习 只有学的不够 没有学的多余 机会总是善于光顾有准备的头脑 工作和学习是相互独立的事情 优先学习工作需要的内容 其他的也要学 由于一直学着人宅的视频教程
  • C++ 保留N位小数的几种方法

    C 保留N位小数的几种方法 setprecision n 的部分用法总结 C 的保留小数常用setprecision n 来实现 n就是保留n位小数 首先一定不要忘了头文件 include
  • O-RAN专题系列-32:5G基站如何升级到O-RAN基站 - O-RU - C/U/S-plane

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 120344479 目录 第1章 硬件架
  • MySQL外键(foreign key)使用及说明详解

    外键也称之为外键约束 foreign key 外键 外面的键 一张表的一个字段 非主键 指向另外一个表的主键 那么该字段就称之为外键 外键所在的表称之为子表 附表 外键所指向的主键所在的表称之为父表 主表 一 增加外键 将一个表的字段与另外