MySQL中的主键约束和外键约束
1、主键约束
表通常具有包含唯一标识表中每一行的值的一列或一组列。 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性。 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束。
如果为表指定了主键约束, 数据库引擎将通过为主键列自动创建唯一索引来强制数据的唯一性。 当在查询中使用主键时,此索引还允许对数据进行快速访问。
如果对多列定义了主键约束,则一列中的值可能会重复,但来自主键约束定义中所有列的值的任何组合必须唯一。
2、外键约束
也称为引用约束或引用完整性约束,能够定义表间以及表内必需的关系。
例如,典型的外键约束可能规定 EMPLOYEE 表中的每个职员必须 是一个现有部门的成员,该部门在 DEPARTMENT 表中定义。
引用完整性是数据库的一种状态,在该状态中,所有外键的所有值都有效。外键是表中的一列或一组列,它的值需要与其父表的行的至少一个主键或唯一键值相匹配。
引用约束是这样一种规则,仅当满足下列其中一个条件时,外键的值才有效:
- 它们作为父键的值出现
- 外键的某些组成部分为空
例如,要建立此关系,应将 EMPLOYEE 表中的部门号定义成外键,并将 DEPARTMENT 表中的部门号定义成主键。
这样当在EMPLOYEE表中新添加一个员工,而其所在部门的代号在DEPARTMENT表中未出现时,这将是一个无效键记录,将被阻止。
引用约束的目的是保证表关系得到维护并遵循数据输入规则。
这意味着只要引用约束有效,数据库管理器就保证对于子表中其外键列中具有非空值的每行,相应父表中都存在一个其父键中具有匹配值的行。
3、当操作违反引用约束时,数据库管理器通过强制执行与每个引用约束关联的一组规则来处理这类情况。
当 SQL 操作尝试更改数据的方式导致引用完整性受到影响时,可能是违反了引用约束。例如,
- 插入操作可能尝试将一个数据行插入到子表中,该行的外键列中的值与相应父表的父键中的值不匹配。
- 更新操作可能尝试将子表的外键列中的值更改为一个在相应父表的父键中没有匹配值的值。
- 更新操作可能尝试将父表的父键中的值更改为一个在子表的外键列中没有匹配值的值。
- 删除操作可能尝试从父表中除去在子表的外键列中具有匹配值的记录。
此时,数据库管理器通过强制执行与每个引用约束关联的一组规则来处理这类情况。这组规则包括:
- 插入规则
- 更新规则
- 删除规则
4、引用约束的插入规则
外键的非空插入值必须与父表的父键的某些值相匹配。如果组合外键的值的任何组成部分为空,那么该值为空。指定外键时,此规则是隐式的。
5、引用约束的更新规则
引用约束的更新规则是在定义引用约束时指定的。选项有 NO ACTION 和 RESTRICT。在更新父表的某行或从属表的某行时应用更新规则。
6、引用约束的删除规则
删除规则是在定义引用约束时指定的。选项有 NO ACTION、RESTRICT、CASCADE 或 SET NULL。仅当外键的某些列允许空值时,才能指定 SET NULL。
MySQL中的主键约束和外键约束的更多相关文章
- MySQL中的主键,外键有什么作用详解
MySQL中的主键,外键有什么作用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 学关系型数据库的同学,尤其在学习主键和外键时会产生一定的困惑.那么今天我们就把这个困惑连根拔起 ...
- MySQL数据库--外键约束及外键使用
什么是主键.外键关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键. 比如: 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯 ...
- 总结: MySQL(基础,字段约束,索引,外键,存储过程,事务)操作语法
1. 显示数据库列表 show databases; # 查看当前所有数据库 show databases \G #以行的方式显示 2. 在命令行中,执行sql语句 mysql -e 'show ...
- 2-16 MySQL字段约束-索引-外键
一:字段修饰符 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table worker(id int not null,name varchar(8) ...
- MySQL数据库(4)_MySQL数据库外键约束、表查询
一.外键约束 创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMARY ...
- MySQL创建表时加入的约束以及外键约束的的意义
1,创建表时加入的约束 a) 非空约束,not null b) 唯一约束,unique c) 主键约束,primary key d) 外键约束,foreign key 1,非空约束,针对某个字段设置其 ...
- mysql字段约束-索引-外键---3
本节所讲内容: 字段修饰符 清空表记录 索引 外键 视图 一:字段修饰符 (约束) 1:null和not null修饰符 我们通过这个例子来看看 mysql> create table wo ...
- MySQL基础9-主键约束、外键约束、等值连接查询、一对一和多对多关系
1.主键约束和外键约束 外键约束 * 外键必须是另一表的主键的值(外键要引用主键!) * 外键可以重复 * 外键可以为空 * 一张表中可以有多个外键! 概念模型在数据库中成为表 数据库表中的多对一关系 ...
- Oracle的主键约束、唯一约束与外键约束
http://www.shangxueba.com/jingyan/122163.html主键: 1.主键约束: 一个表只能有一个主键约束.主键可以是单个字段,也可以是多个字段.无论是哪种情况,其所 ...
随机推荐
- 1.3 JAVA规范以及基础语法(if条件和循环)
一.规范以及运算符 1.命名规则 类名大驼峰规则方法名.变量名小驼峰原则常量大写.下划线分开见名释义.不与关键字冲突 关键字链接:https://www.runoob.com/java/java-ba ...
- MySQL优化相关参数--先做个记录,以后可能用得到
innodb_io_capacity:可设置的磁盘IO性能参数,越高代表当前mysql的IO性能更好,可用做决策刷脏页速度的参数: innodb_flush_neighbors:刷脏页是否开启连坐机制 ...
- Java web 实验三部分资料上传
花好月圆系列 貂蝉 黄月英 孙尚香 甄姬 标准包 魏 曹操 司马懿 郭嘉 甄姬 张辽 许褚 夏侯惇 蜀 刘备 关羽 张飞 诸葛亮 黄月英 赵云 马超 吴 孙权 孙尚香 周瑜 大乔 甘宁 吕蒙 群 吕布 ...
- window 定时任务小项目,每秒钟,每分钟访问url
个人百度网盘中 链接: https://pan.baidu.com/s/15sK2H-OtrAkAYcXjsxwihA 提取码: awv3 复制这段内容后打开百度网盘手机App,操作更方便哦
- 抓包工具Fiddler使用
1.参考博客 https://blog.csdn.net/ychgyyn/article/details/82154433 https://www.cnblogs.com/miantest/p/728 ...
- 链接Linux工具(SecureCRT)
SecureCRT下载 点我下载 http://download.csdn.net/download/weixin_39549656/10207279 安装 先运行注册机 链接 输入密码 出现以下界面 ...
- C# WPF ASP.net 上传多文件和数据
C# WinForm 上传多文件和数据 public static class HttpHelper { private static readonly Encoding DEFAULTENCODE ...
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务
笔记 5.微服务调用方式之feign 实战 订单调用商品服务 简介:改造电商项目 订单服务 调用商品服务获取商品信息 Feign: 伪RPC客户端(本质还是用http) ...
- pixi小游戏开发(vue+typescript)
一直以来都觉得typescript是以后前端发展的趋势,一些大厂的前端项目都已经在用ts来替代js了. 正好最近刚开始准备用pixi写个小游戏,因为刚开工没多久,于是今天就将之前的功能用ts去实现了一 ...
- springboot整合es客户端操作elasticsearch(四)
对文档查询,在实际开发中,对文档的查询也是偏多的,记得之前在mou快递公司,做了一套事实的揽件数据操作,就是通过这个来存储数据的,由于一天的数据最少拥有3500万数据 所以是比较多的,而且还要求查询速 ...