mysql 外键的基本使用
外键的使用条件:
两个表必须是InnoDB表,MyISAM表暂时不支持外键
外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显式建立;
外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;
为表添加外键的语法:alter table 表名 add constraint 外键名称 foreign key(外键字段名称) references 外表表名(主键字段名称)
举个例子:有两张表,一张班级表class,一张学籍表grade:


我们为学籍表grade添加外键out_key:

接着我们看看表的结构发生了哪些变化:

然后我们试着去给学籍表grade插入数据看看能否成功:

我们可以看到报错,原因就是class表为空,通俗点讲就是你想把学生分到一个班级,但是那个班级还不存在。
我们先给班级表里面插入数据:


接着我们再来给学籍表插入数据:

那如果我失误,执行了删除班级表中的一条数据的语句:

我们可以看到会报错,因为我们的一班里面有学生存在,
那我能不能添加学生到不存在的班级呢?

我们看到它也会报错,很明显程序拒绝这种逻辑错误的操作。
那再实际开发项目过程中我们想把主表的数据修改或者删除,那么从表的数据也应该跟着修改或删除,否则数据库中将产生大量的垃圾数据,
那么我们可以在添加外键的时候增加条件:
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
ON DELETE、ON UPDATE表示事件触发限制,可设参数:
RESTRICT(限制外表中的外键改动,默认值)
CASCADE(跟随外键改动)
SET NULL(设空值)
SET DEFAULT(设默认值)
NO ACTION(无动作,默认的)
用个实例来演示:
我们新建一个表结构跟class表一样的class1表:

同理我们新建一个grade1表:

接着我们为grade1表添加外键:

然后我们试着删除class1表中的id为1的数据看看能不能成功:

可以看到这次没有报错,那我们再看看grade1表有什么变化:

可以看到我们的zhagnsan也跟着被删除掉了。
那我改动class1表中的数据会有什么变化:

可以看到二班的id被改成5了
grade1表表面上并没有发生改变,但其实它的gid为2已经映射为class1中的id为5

我们删除class1中id为5的数据:

那么我们已经能猜到grade表中的数据被删除的是gid为2的lisi同学:

删除外键语法:
如果我们不想使用外键了需要删除它,那么只要执行下面的语句就好了:
alter table 表名 drop foreign key 外键名称;

以上就是mysql中外键的一些基本用法了
参考链接:https://www.cnblogs.com/microtiger/p/7814177.html
mysql 外键的基本使用的更多相关文章
- mysql 外键约束备注
梳理mysql外键约束的知识点. 1.mysql外键约束只对InnoDb引擎有效: 2.创建外键约束如下: DROP TABLE IF EXISTS t_demo_product; CREATE TA ...
- MySQL外键之级联
简介 MySQL外键起到约束作用,在数据库层面保证数据的完整性.例如使用外键的CASCADE类型,当子表(例如user_info)关联父表(例如user)时,父表更新或删除时,子表会更新或删除记录,这 ...
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- Mysql 外键设置
MySql外键设置详解 (1) 外键的使用: 外键的作用,主要有两个: 一个是让数据库自己通过外键来保证数据的完整性和一致性 一个就是能够增加ER图的可读性 有些人认为外键的建立会给 ...
- MySQL外键的作用和创建
MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据.使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表 CREATE TABLE `example1` ( ` ...
- Mysql外键的使用
MySQL外键(请确保数据库是innodb类型)网上有很多介绍的文章,这里我就凭自己的理解再次整理了下,废话不多说,直入正题哈.外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据 ...
- mysql 外键和子查询,视图
1.mysql 外键约束 建表时生成外键 foreing key ('sid') references' student'('id'); 建表后添加外键 alter table' course ...
- mysql外键使用和事物使用
mysql外键功能主要是为了保证关联表数据的一致性,主要目的是控制存储在外键表中的数据. 使两张表形成关联,外键只能引用外表中的列的值! 例如: a b 两个表 a表中存有 客户号,客户名称 b表中存 ...
- Mysql外键设置中的CASCADE、NO ACTION、RESTRICT、SET NULL
转: Mysql外键设置中的CASCADE.NO ACTION.RESTRICT.SET NULL 2017年06月11日 10:03:13 雅静8 阅读数:5491 版权声明:本文为博主原创文章 ...
- mysql外键约束总结
总结三种MySQL外键约束方式 如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表.外键是用来实现参照完整性的,不同的外键约束方式将可以使两张表紧密的结合起来,特别是 ...
随机推荐
- 函数$f(x+1)$和$f(x-1)$的奇偶性
前言 廓清认知 1.函数\(y=f(x)\)的奇偶性 ①\(y=f(x)\)为奇函数,则满足\(f(-x)+f(x)=0\),即关于点\((0,0)\)对称: ②\(y=f(x)\)为偶函数,则满足\ ...
- 从零和使用mxnet实现dropout
需求: 从零和使用mxnet实现dropout 数据集: 使用load_digits()手写数字数据集 要求: 使用1个掩藏层n_hidden1 = 36,激活函数为relu,损失函数为softmax ...
- 第01组 Alpha冲刺(4/6)
队名:007 组长博客: https://www.cnblogs.com/Linrrui/p/11884375.html 作业博客: https://edu.cnblogs.com/campus/fz ...
- C++ 派生类覆盖重载基类函数
派生类希望基类重载函数可见,情况有三种: a)派生类中覆盖某个版本,则某个版本可见,全部都覆盖重写,则全部版本可见. b)派生类中一个也不覆盖,则全部基类版本可见. c)派生类需要添加新的重载版本,同 ...
- 全球 IPv4 地址正式耗尽
重要消息: 就在 2019/11/25 UTC+1 15:35 时,一封来自欧洲 RIPE NCC 的邮件中得到确认:全球的IPv4地址已经彻底耗尽. IPv4 大家应该很熟悉了,就是我们平常所知道的 ...
- 2018-2019-20175205实验四《Android程序设计》实验报告
目录 2018-2019-20175205实验四<Android程序设计>实验报告 实验要求 教材学习 第二十五章 活动 第二十六章 UI组件 第二十七章 布局 实验步骤 任务一 任务二 ...
- barbor部署
harbor 部署介绍: 1.版本信息 系统 :Centos 7.5 版本: harbor-offline-installer-v1.8.1 docker :docker-ce-18.06.2.ce- ...
- maven添加本地包命令mvn install:install-file
mvn install:install .jar -Dfile:要注册的jar,绝对路径
- centos下 yum快速安装maven
wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos ...
- (7)ASP.NET Core 中的错误处理
1.前言 ASP.NET Core处理错误环境区分为两种:开发环境和非开发环境.●开发环境:开发人员异常页.●非开发环境:异常处理程序页.状态代码页.在Startup.Configure方法里面我们会 ...