Mysql外键的使用

外键是一个非常非常好用的一个东西,同时也是很多种关系数据库都有的一种功能,简单的来说就是可以将两张表之间建立一个关联,可以做到操作一张表的时候,另外一个表的数据也会同步发生变化。

例子:
一个学生表里面有学生的所有信息,其中有一个字段是班级id,又有一个班级表,记录着所有的班级信息,按照逻辑来说,如果我们删除了班级
表里面的某个班级,学生表里面是这个班级id的信息就应该修改。

以上的例子我们如果是使用程序是可以正常的完成的,先删除这个班级,再在学生表里将是这个班级的学生信息的班级id字段进行修改,分为这两部。 但是这个如果我们使用了外键,只需要一步就可以了呀,关联了外键 只要一个有修改,另外一个会自动的更新过去,显然这个是更加符合程序的。也更轻松

使用前的细节
  1. 数据库在选用存储引擎的时候要选择适配外键的存储引擎,如mysql的默认存储引擎innodb
  2. 相互关联的外键字段的字段类型必须要保持一致,如学生表的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  -- 默认存储引擎和编码的字符串

在已有的表中进行外键的添加和删除
  1. 删除外键
    ···
    – 删除外键(外键约束)
    alter table stu_study drop foreign key stu_study_classes;
    ···

    删除外键是通过在表格中根据外键名进行删除, 这个也是间接的让我们知道了外键名是不能够重复的。
  2. 添加外键
 -- 添加外键alter table stu_study addconstraint stu_study_classes  -- 外键名 是一定不能够重复的,通常会用关联的两个表名进行命名foreign key(course_id)references classes(id)on delete cascade;


在已有的表中添加外键和创建表的时候添加外键是非常像的,有个细节就是他要使用contraint 外键名 来设置外键的名称
外键的增加修改我们会发现和表格字段的增加修改是很像的,使用的关键字都是add drop等等

关联动作的操作

子表

主表

字表和子表我们可以简单的理解成,设置了外键的那个表就是子表
关联动作有很多种,如 cascade,set Nullno action这三个都是在设置外键的时候设置关联动作,如

表示的是在删除时的执行的动作,主要区别如下:

  1. cascade 删除主表的某个字段的时候,子表含有这个字段的数据会被清空,这个还是属于相对危险的一个操作的
  2. +set null 删除主表的某个字段的时候,子表含有这个字段的这个哪一行的这个字段会用null来显示,但是有个细节就是设置外键的这个字段字段类型就不能设置为not null类型的,否则会报错
  3. 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外键的使用相关推荐

  1. MySQL外键约束On Delete、On Update各取值的含义

    主键.外键和索引的区别?   主键 外键 索引 定义: 唯一标识一条记录,不能有重复的,不允许为空 表的外键是另一表的主键, 外键可以有重复的, 可以是空值 主索引(由关键字PRIMARY定义的索引) ...

  2. MySql外键学习总结

    mysql添加外键 为已经添加好的数据表添加外键: 语法:alter table 表名 add constraint FK_ID foreign key(你的外键字段名) REFERENCES 外表表 ...

  3. mysql 外键有啥用途_Mysql外键是什么?有哪些用处?(图文+视频)

    本篇文章主要给大家介绍mysql外键是什么以及mysql数据库中的外键的作用. 首先大家要简单了解下什么mysql? MySQL是一个关系型数据库管理系统,也是最流行的关系型数据库管理系统之一,在 W ...

  4. MySQL外键关联(一对多)MySQL连接查询

    MySQL外键关联(一对多) 外键说明 什么是外键? 1)表A中有字段(如身份证号)做了主键,表B中也有这个字段(身份证号),这里的身份证号一定来自表A同样字段里的内容,但再B表中身份证号对应id可以 ...

  5. mysql 外键关联

    mysql 外键关联 什么是外键: 外键是一个特殊的索引,用于关联两个表,只能是指定内容. 如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联 clas ...

  6. mysql 外键约束_MySQL之外键约束(FOREIGN KEY)

    定义: MySQL外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列.一个表可以有一个或多个外键. 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每 ...

  7. mysql外键_MySQL外键约束(FOREIGN KEY)

    MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用.对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表). 外键用 ...

  8. mysql外键约束怎么写_mysql外键约束怎么写

    mysql外键约束的写法:[[CONSTRAINT ] FOREIGN KEY 字段名 REFERENCES 主键列1].外键约束是表的一个特殊字段,经常与主键约束一起使用. 在 CREATE TAB ...

  9. MySQL——外键约束

    设置外键约束(FOREIGN KEY, FK ) MySQL外键约束是表的一个特殊字段,经常与外键约束一起使用.对于两个具有关联关系的表而言,相关字段中主键所在表称为主表(父表),外键所在表称为从表( ...

  10. mysql 命令行 外键_MySQL命令行MySql外键设置详解

    第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...

最新文章

  1. 人生曲线——我们不拥有将来,只拥有此刻
  2. 万万没想到! logger.info() 还能导致线上故障?
  3. 什么是Python蛋?
  4. 阿里达摩院数学竞赛考题曝光!4道题限时48小时,网友:题目能看懂但就是不会做...
  5. 【转】解决父容器高度不跟随子元素扩大的问题
  6. js数组与字符串的相互转换方法
  7. 【CV秋季划】人脸关键点检测,人脸识别视频更新
  8. python 解小学数学题_孩子尝试python解数学题,怎么实现呢?
  9. python中none算变量吗_在python中对变量判断是否为None的三种方法总结
  10. Flink从入门到入土
  11. c 提示错误expected) before ; token_实践总结——Git 常见错误及解决方法
  12. 进度条上的小圆点怎么做_Android自定义带圆点的半圆形进度条
  13. 前端开发技巧:网页切图图片格式选择GIF、JPEG 和 PNG区别和对比
  14. 基于javaweb的教师信息管理系统
  15. ununtu18.0安装搜狗输入法
  16. PLSQL 官方下载及安装
  17. python二级考试操作题6答案_python二级考试试题6
  18. Android 11.0 12.0TvSettings系统设置遥控器home键退不出主页面功能的修复
  19. 王树森:学 DRL 走过的弯路太多,想让大家避开
  20. 在ipv4的网络上使用utorrent3.0下…

热门文章

  1. 如何在CentOS中屏蔽恶意爆破IP (CentOS8.x)
  2. Android滑动页面 底部小圆点,Android ViewPager无限循环实现底部小圆点动态滑动
  3. 投资理财-低估值分散
  4. 买房常识不得不知 你知道房子买第几层最好吗(图
  5. 苹果手机无法识别new Date() 来获取的时间
  6. 建模助手丨我没卷,但『 Dynamo节点管理 』真的好牛啊
  7. 六沐便利店店长经验:想要新店开业不出现问题,做好以下几点!
  8. Java实现蓝桥杯七对数字
  9. 分离聚合支付之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c
  10. POJ 2983 浅谈差分约束系统处理严格等价性问题