主键与外键

简介: 主键与外键

主键(PRIMARY KEY) 主键(PRIMARY KEY)”的完整称呼是“主键约束”,主键约束即在表中定义一个主键来唯一确定表中每 一行数据的标识符。主键可以是表中的某一列或者多列的组合,其中由多列组合的主键称为复合主键。主键 应该遵守下面的规则: • 每个表只能定义一个主键。 • 主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在两行数据有相同的主键值。这是 唯一性原则。 • 一个列名只能在复合主键列表中出现一次。 • 复合主键不能包含不必要的多余列。当把复合主键的某一列删除后,如果剩下的列构成的主键仍然满足唯 一性原则,那么这个复合主键是不正确的。这是最小化原则。


外键约束(FOREIGN KEY) MySQL 外键约束(FOREIGN KEY)用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可 以有一个或多个外键。 外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键的值必须等于另一个表中 主键的某个值。 外键是表的一个字段,不是本表的主键,但对应另一个表的主键。定义外键后,不允许删除另一个表中具有 关联关系的行。 外键的主要作用是保持数据的一致性、完整性。例如,用户表 tb_user 的主键是 id,在地址表 tb_address 中 有一个键 userid与这个 id 关联。 主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的 表就是主表。 从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的表就是从表。


定义一个外键时,需要遵守下列规则: • 外键要存在,首先必须保证表的引擎是 InnoDB(默认的存储引擎)。 • 父表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则父表与子表是同一 个表,这样的表称为自参照表,这种结构称为自参照完整性。 • 必须为父表定义主键。 • 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键 中,这个外键的内容就是正确的。 • 在父表的表名后面指定列名或列名的组合。这个列或列的组合必须是父表的主键或候选键。 • 外键中列的数目必须和父表的主键中列的数目相同。 • 外键中列的数据类型必须和父表主键中对应列的数据类型相同。 • 如果外键约束模式选择SET NULL ,那么字段必须允许为NULL。


目录
相关文章
|
安全 数据库
通过E-R理解 主键和外键的关系
实例 现有课程和教师两个实体,课程实体的属性有课程名称、课程编号、课程属性、考试类型;教师实体的属性包括姓名、工号、职称;一门课程可以有多个教师,且每一位教师可以教授多门课程。教师每教授一门课有课序号。
4883 1
通过E-R理解 主键和外键的关系
|
6月前
使用外键
使用外键。
34 1
|
6月前
外键
外键。
31 5
|
6月前
外键的设置
外键的设置。
66 6
|
SQL 关系型数据库 MySQL
列的完整性约束——主键约束
列的完整性约束——主键约束
|
SQL 开发者
主键自增长|学习笔记
快速学习主键自增长
|
关系型数据库 MySQL 索引
MySQL约束——添加主键约束(联合主键)、删除主键约束
MySQL约束——添加主键约束(联合主键)、删除主键约束
2350 0
|
Java 数据库
JPA联合主键的使用(@EmbeddedId+@Embeddable)
JPA联合主键的使用(@EmbeddedId+@Embeddable)
971 0
|
SQL 开发者
约束之主键约束|学习笔记
快速学习约束之主键约束
|
存储 关系型数据库 索引
InnoDB表主键的选择
InnoDB表都是有主键的,如果没有显示定义主键,则InnoDB首先判断表中是否有非空的唯一索引,如果有,该列即为主键。如果有多个单一列唯一索引,则按照唯一索引顺序,排在前的为主键。
1534 0