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.主键约束: 一个表只能有一个主键约束.主键可以是单个字段,也可以是多个字段.无论是哪种情况,其所 ...
随机推荐
- LC 722. Remove Comments
Given a C++ program, remove comments from it. The program source is an array where source[i] is the ...
- es6 单例
class Singleton { constructor() { this.conn = this.connect(); } static getInstance() { if (!Singleto ...
- Linux 查看CPU和内存的使用情况
Linux 查看CPU和内存的使用情况 如何查看Linux机器的CPU和内存的使用情况. 可以通过如下方式: 1.查看CPU和内存的实时使用情况 使用如下命令: top 命令执行后,效果如下(资源的使 ...
- Python统计分析可视化库seaborn(相关性图,变量分布图,箱线图等等)
Visualization of seaborn seaborn[1]是一个建立在matplot之上,可用于制作丰富和非常具有吸引力统计图形的Python库.Seaborn库旨在将可视化作为探索和理 ...
- HTML5 DOM 新增数据类型
HTML5 DOM 新增数据类型 前言 相对于HTML4当中的DOM,在HTML5中的DOM,新增了很多复杂数据类型,为实际的应用提供了便捷的操作. 在HTML5 DOM中,新增了如下的内容: HTM ...
- curl and wget
写在前面: a. 对比curl 和 wget 的相同和不同点 来记忆 a-1 curl url 直接将请求内容输出到标准输出. 如果下载不是瞬时间完成,会显示下载进度条,如果向取消,加-s : w ...
- HBASE概念补充
HBASE概念补充 HBase的工作方式: hbase中的表在行的方向上分隔为多个HRegion,分散在不同的RegionServer中 这样做的目的是在查询时可以将工作量分布到多个RegionSer ...
- RDP爆破方式攻击防控思路梳理
- 【转帖】.NET的一点历史故事:作者的一些感想
.NET的一点历史故事:作者的一些感想 https://mp.weixin.qq.com/s?__biz=MzAwNTMxMzg1MA==&mid=2654068684&idx=2&a ...
- JavaScript作用域简单记录
作用域以及作⽤用域链 this 没有块级作⽤用域 闭包 作用域 - 作用域链 作用域 - this this 永远是最后调用的对象 作用域 - 没有块级作用域 function Main(){ if( ...