当前位置: 首页 > news >正文

( 10 )MySQL中的外键

MySQL中的外键

外键
外键: foreign key ,外面的键(键不在自己表中) , 如果一张表中有一字段(非主键)指向另外一张表的主键 , 那么该字段称之为外键.
一张表可以有多个外键.
新增外键
创建外键的两种方式:
1 创建表的时候创建外键
2 创建表之后增加创建外键
外键要求字段本身必须先是一个索引(普通索引),如果字段本身没有索引,外键先创建一个索引然后才会创建外键本身
在新增表之后增加外键: 修改表结构
基本语法:
alter table 表名 add [constraint 外键名字] foreign key (外键字段) references 父表(主键字段);
修改外键
外键不可修改 : 只能先删除后新增
删除外键
删除外键基本语法:
alter table 表名 drop foreign key 外键名;
--说明表中有多个字段但名字不能相同
外键删除不能通过查看表结构查看是否被删除 ,可以通过表创建语句查询
外键作用
外键默认的作用有两点,一个对父表,一个对子表(外键字段所在的表)
对子表约束:
子表数据进行写操作(增和改)的时候,如果对应的外键字段在父表中找不到对应的匹配,那么会操作失败(约束子表数据操作)
例: 把子表中的一个同学 放到 父表中的班级中 , 但是父表中不含有这个班级 -- 失败
对父表约束:
父表数据进行写操作(删和改:都必须涉及到主键本身)
例 : 人走茶凉
如果对应的主键在子表中已经被数据所引用 那么就不允许操作.
外键条件
1.外键要存在必须保证搜索引擎是innodb(默认的),否则外键可以创建成功,但是没有效果
2.外键字段的字段类型必须与父表的主键类型完全一致.
3.一张表中外键名字不能重复
4. 增加外键的字段(数据已经存在),必须保证数据与父表主键对应
数据已存在,不能建立外键,因为不能改变对应关系.
外键约束
所谓的外键约束就是指外键的作用,通过对外键的需求进行定制操作.
约束模式有三种: 都是对父表的操作
Distinct : 严格模式(默认的) 父表不能删除或更新一个已经被子表数据引用的记录
Cascade : 级联模式 父表的操作,对应子表关联的数据也跟着操作
Set Null : 置空模式 父表操作之后,子表对应的数据(外键字段)被置空
通常的一个合理的做法(约束模式):删除的时候子表被置空,更新的时候子表级联操作
基本语法:
foreign key (外键字段) references 父表(主键字段) on delete 约束模式 on update 约束模式
 
foreign key (外键字段) references 父表(主键字段) on delete set null on update cascade
外键使用的时候降低了程序的控制力 , 外键好用 ,但是不敢用.
 

 
 
 

转载于:https://www.cnblogs.com/zslaona/p/7754993.html

相关文章:

  • mysql 16384_MySQL性能优化
  • Hibernate的注解和检索
  • mysql tables()_Mysql中对table的操作问题
  • Java中各种集合(字符串类)的线程安全性!!!
  • linx 卸载mysql_Linux下卸载MySQL
  • mysql简单分表_mysql分表场景分析与简单分表操作
  • vue 条件渲染与列表渲染
  • vue select清空_Vue+Webpack开发可复用的单页面富应用教程(技巧篇)
  • 两个同级div等高布局
  • cant connect to local mysql_Can't connect to local MySQL server through socket
  • jQuery的切换函数(hover,toggle)
  • mysql锁怎么控制并发_Mysql并发控制-锁
  • yii的ActionForm组件
  • java调用python爬虫_Java调用Python爬虫
  • 移动端如何用swiper实现导航栏效果
  • [译]如何构建服务器端web组件,为何要构建?
  • android图片蒙层
  • Apache Spark Streaming 使用实例
  • ECS应用管理最佳实践
  • HashMap剖析之内部结构
  • HTML中设置input等文本框为不可操作
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • SSH 免密登录
  • tweak 支持第三方库
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 大整数乘法-表格法
  • 分享一份非常强势的Android面试题
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 类orAPI - 收藏集 - 掘金
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 软件开发学习的5大技巧,你知道吗?
  • 赢得Docker挑战最佳实践
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​iOS安全加固方法及实现
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #QT(智能家居界面-界面切换)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (70min)字节暑假实习二面(已挂)
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (LeetCode C++)盛最多水的容器
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (六)vue-router+UI组件库
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十一)图像的罗伯特梯度锐化
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (原創) 未来三学期想要修的课 (日記)
  • (转)项目管理杂谈-我所期望的新人
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net多线程总结