Mysql外键的使用
Mysql外键的使用
外键是一个非常非常好用的一个东西,同时也是很多种关系数据库都有的一种功能,简单的来说就是可以将两张表之间建立一个关联,可以做到操作一张表的时候,另外一个表的数据也会同步发生变化。
例子:
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级
表里面的某个班级,学生表里面是这个班级id的信息就应该修改。
以上的例子我们如果是使用程序是可以正常的完成的,先删除这个班级,再在学生表里将是这个班级的学生信息的班级id字段进行修改,分为这两部。 但是这个如果我们使用了外键,只需要一步就可以了呀,关联了外键 只要一个有修改,另外一个会自动的更新过去,显然这个是更加符合程序的。也更轻松
使用前的细节
- 数据库在选用存储引擎的时候要选择适配外键的存储引擎,如mysql的默认存储引擎innodb
- 相互关联的外键字段的字段类型必须要保持一致,如学生表的class_id是int类型,那么班级表的class_id的类型最好也要使用int类型,这个十分的重要
在新表中创建外键约束
create table stu_study (sid int primary key auto_increment,-- 定义Sid sname varchar(15) not null,course_id int default null, -- 定义课程id 课程id是外键所以要与关联的主表的字段类型保持一致constraint stu_study_class -- 一个表里可能有多个表之间关联,所以外键需要起一个名字foreign key (class_id) -- 关联的外键名references classes(id) -- 关联的主表和主表的字段on delete cascade -- 当删除的时候触发)engine=InnoDB default charset utf8 -- 默认存储引擎和编码的字符串
在已有的表中进行外键的添加和删除
- 删除外键
···
– 删除外键(外键约束)
alter table stu_study drop foreign key stu_study_classes;
···
删除外键是通过在表格中根据外键名进行删除, 这个也是间接的让我们知道了外键名是不能够重复的。 - 添加外键
-- 添加外键alter table stu_study addconstraint stu_study_classes -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名foreign key(course_id)references classes(id)on delete cascade;
在已有的表中添加外键和创建表的时候添加外键是非常像的,有个细节就是他要使用contraint 外键名 来设置外键的名称
外键的增加修改我们会发现和表格字段的增加修改是很像的,使用的关键字都是add drop等等
关联动作的操作
子表
主表
字表和子表我们可以简单的理解成,设置了外键的那个表就是子表
关联动作有很多种,如 cascade
,set Null
,no action
这三个都是在设置外键的时候设置关联动作,如
表示的是在删除时的执行的动作,主要区别如下:
cascade
删除主表的某个字段的时候,子表含有这个字段的数据会被清空,这个还是属于相对危险的一个操作的+set null
删除主表的某个字段的时候,子表含有这个字段的这个哪一行的这个字段会用null来显示,但是有个细节就是设置外键的这个字段字段类型就不能设置为not null类型的,否则会报错no action
这个字段会比较有意思,也就是说当主表要删除某个行的时候,如果外键关联有含有这个主表的外键的字段数据的话,就不会删除成功,系统会直接报错
关联更新操作
之前是主要讲了关联删除,是因为外键在使用的时候关联删除操作是使用的比较频繁的,关联更新的频率是相对来说低一点儿的
关联更新的三个关联操作和删除时一样的,分别是cascade
,set null
,no action
意思是也是一样的,主表某个字段更新了,子表也会更新那个字段!!!,主表更新的某条数据,子表的使用的那个数据会变成空,和子表在使用的情况下,主表就不能够更新数据
alter table stu_study drop foreign key stu_study_classes; -- 删除外键-- 添加外键alter table stu_study add constraint stu_study_classes foreign key (course_id) references classes(id) on delete set null -- 一次性设置外键的两种动作on update cascade
总结
- 数据库的外键是非常非常好用的一个技术,可以让我们快速的进行表之间的数据的更新
- 外键可以简单的理解成会自动的替我们做一个数据变动的处理
Mysql外键的使用相关推荐
- MySQL外键约束On Delete、On Update各取值的含义
主键.外键和索引的区别? 主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...
- MySql外键学习总结
mysql添加外键 为已经添加好的数据表添加外键: 语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表 ...
- mysql 外键有啥用途_Mysql外键是什么?有哪些用处?(图文+视频)
本篇文章主要给大家介绍mysql外键是什么以及mysql数据库中的外键的作用. 首先大家要简单了解下什么mysql? MySQL是一个关系型数据库管理系统,也是最流行的关系型数据库管理系统之一,在 W ...
- MySQL外键关联(一对多)MySQL连接查询
MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...
- mysql 外键关联
mysql 外键关联 什么是外键: 外键是一个特殊的索引,用于关联两个表,只能是指定内容. 如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联 clas ...
- mysql 外键约束_MySQL之外键约束(FOREIGN KEY)
定义: MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每 ...
- mysql外键_MySQL外键约束(FOREIGN KEY)
MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用 ...
- mysql外键约束怎么写_mysql外键约束怎么写
mysql外键约束的写法:[[CONSTRAINT ] FOREIGN KEY 字段名 REFERENCES 主键列1].外键约束是表的一个特殊字段,经常与主键约束一起使用. 在 CREATE TAB ...
- MySQL——外键约束
设置外键约束(FOREIGN KEY, FK ) MySQL外键约束是表的一个特殊字段,经常与外键约束一起使用.对于两个具有关联关系的表而言,相关字段中主键所在表称为主表(父表),外键所在表称为从表( ...
- mysql 命令行 外键_MySQL命令行MySql外键设置详解
第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...
最新文章
- 人生曲线——我们不拥有将来,只拥有此刻
- 万万没想到! logger.info() 还能导致线上故障?
- 什么是Python蛋?
- 阿里达摩院数学竞赛考题曝光!4道题限时48小时,网友:题目能看懂但就是不会做...
- 【转】解决父容器高度不跟随子元素扩大的问题
- js数组与字符串的相互转换方法
- 【CV秋季划】人脸关键点检测,人脸识别视频更新
- python 解小学数学题_孩子尝试python解数学题,怎么实现呢?
- python中none算变量吗_在python中对变量判断是否为None的三种方法总结
- Flink从入门到入土
- c 提示错误expected) before ; token_实践总结——Git 常见错误及解决方法
- 进度条上的小圆点怎么做_Android自定义带圆点的半圆形进度条
- 前端开发技巧:网页切图图片格式选择GIF、JPEG 和 PNG区别和对比
- 基于javaweb的教师信息管理系统
- ununtu18.0安装搜狗输入法
- PLSQL 官方下载及安装
- python二级考试操作题6答案_python二级考试试题6
- Android 11.0 12.0TvSettings系统设置遥控器home键退不出主页面功能的修复
- 王树森:学 DRL 走过的弯路太多,想让大家避开
- 在ipv4的网络上使用utorrent3.0下…
热门文章
- 如何在CentOS中屏蔽恶意爆破IP (CentOS8.x)
- Android滑动页面 底部小圆点,Android ViewPager无限循环实现底部小圆点动态滑动
- 投资理财-低估值分散
- 买房常识不得不知 你知道房子买第几层最好吗(图
- 苹果手机无法识别new Date() 来获取的时间
- 建模助手丨我没卷,但『 Dynamo节点管理 』真的好牛啊
- 六沐便利店店长经验:想要新店开业不出现问题,做好以下几点!
- Java实现蓝桥杯七对数字
- 分离聚合支付之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
- POJ 2983 浅谈差分约束系统处理严格等价性问题