当前位置: 首页 > 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实现导航栏效果
  • Apache的80端口被占用以及访问时报错403
  • ES6之路之模块详解
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • MQ框架的比较
  • NSTimer学习笔记
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • Vue ES6 Jade Scss Webpack Gulp
  • vue-cli在webpack的配置文件探究
  • XForms - 更强大的Form
  • 回顾 Swift 多平台移植进度 #2
  • 解决iview多表头动态更改列元素发生的错误
  • 驱动程序原理
  • 手写双向链表LinkedList的几个常用功能
  • 微信公众号开发小记——5.python微信红包
  • ​configparser --- 配置文件解析器​
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总518. 零钱兑换 II
  • #大学#套接字
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • (14)Hive调优——合并小文件
  • (HAL库版)freeRTOS移植STMF103
  • (二)正点原子I.MX6ULL u-boot移植
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (剑指Offer)面试题34:丑数
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)VirtualBox安装增强功能
  • (正则)提取页面里的img标签
  • (转)Linux下编译安装log4cxx
  • *上位机的定义
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET企业级应用架构设计系列之结尾篇
  • ??myeclipse+tomcat
  • @Autowired注解的实现原理
  • @vue/cli脚手架
  • [ C++ ] STL---string类的使用指南
  • [22]. 括号生成
  • [Angular] 笔记 18:Angular Router