MySQL 主键和外键区别
MySQL 中的Key(键)是在两个表之间构建关系的基本元素。它们在维护关系数据库结构时非常有用。它们之间的主要区别在于主键标识表中的每条记录,而外键用于将两个表链接在一起。在本文中,我们将根据各种参数介绍主键和外键之间的本质区别。在进行比较之前,我们将简要讨论这些Key(键)。
一、什么是主键?
主键是唯一或非空键,用于唯一标识表或关系中的每条记录。每个数据库都需要一个表的每一行的唯一标识符,而主键在唯一标识表中的行方面起着至关重要的作用。主键列不能存储重复值。它也被称为最小超级密钥;因此,我们不能在任何关系中指定多个主键。
例如,我们有一个名为customer的表,其中包含 ID、Name 和 City 等属性。只有ID 列不能包含重复值和 NULL 值,因为每个客户都有唯一的标识号。此功能有助于唯一标识数据库中的每条记录。因此,我们可以将 ID 属性设为主键。
二、什么是外键?
外键是数据库中的一组一个或多个列,用于唯一标识某个其他表中的另一个数据库记录,以保持引用完整性。它也称为在数据库中的两个不同表之间建立关系的引用键。外键始终与另一个表中的主键列匹配。这意味着一个表中的外键列引用另一个表的主键列。外键有利于关系数据库规范化,尤其是当我们需要访问其他表中的记录时。
外键与父表保存初始列值的表创建父子关系,子表引用父列值。只有在子表上找到外键约束时,我们才能实现这种关系。
例如,我们有一个名为contact的表,其中包含ID、Customer_Id、Customer_Info 和Type 等属性。在这里,我们可以将Customer_Id 列设为外键。
如果我们想删除从两个表中删除记录的引用数据,我们可以在联系人表中定义外键,如下所示:
FOREIGN KEY (Customer_Id) REFERENCES customer(ID)
ON DELETE CASCADE
ON UPDATE CASCADE
当我们从 customer 表中删除任何记录时,相关行也会在 contact 表中删除,并且两个表都会自动更新。
三、主键和外键的关键区别
以下几点解释了主键和外键之间的区别:
- 关系数据库中的主键约束充当表中每一行的唯一标识符。相反,外键约束在两个不同的表之间建立关系,以唯一标识同一个表或另一个表的行。
- 主键列不存储 NULL 值,而外键可以接受多个 NULL 值。
- 关系数据库中的每个表不能定义多个主键,而我们可以在表中指定多个外键。
- 我们无法删除父表的主键值,它在子表中被外键列引用。相反,我们可以删除子表的外键值,即使它们引用了父表的主键。
- 主键是唯一且非空的约束,因此没有两行可以具有相同的主键属性值,而外键字段可以存储重复值。
- 我们可以将值插入到主键列中,没有任何限制。相反,我们需要确保值存在于主键列中,同时在外键表中插入值。
- 我们可以在临时表上隐式定义主键约束,而不能对临时表强制外键约束。
四、主键与外键 的比较
以下比较图表快速解释了它们的主要区别:
比较维度 | 主键(Primary Key) | 外键(Foreign Key) |
---|---|---|
基本概念 | 它用于唯一标识数据库表中的每条记录。 | 它用于将两个表链接在一起。这意味着一个表中的外键引用另一个表的主键。 |
空值 | 主键列值永远不能为 NULL。 | 外键列可以接受 NULL 值。 |
数量 | 一张表只能有一个主键。 | 一张表可以有多个外键。 |
重复值 | 主键是唯一的属性;因此,它不能存储相关的重复值。 | 我们可以在外键列中存储重复值。 |
索引 | 默认情况下,主键是聚集索引,这意味着它会自动建立索引。 | 默认情况下,外键不是聚集索引。我们可以手动创建聚集索引。 |
删除 | 无法从表中删除主键值。如果要删除它,请确保引用外键不包含其值。 | 可以从表中删除外键值,而不必担心它引用另一个表的主键。 |
插入 | 我们可以将值插入主键列而没有任何限制,无论它是否存在于外键中。 | 主键列中不存在的值不能插入到引用外键中。 |
临时表 | 可以在临时表上定义主键约束。 | 不能在临时表上定义外键约束。 |
子父关系 | 它不能在表中创建父子关系。 | 它可以在表中建立父子关系。 |
结论
在本文中,我们对主键和外键约束进行了比较。在这里,我们得出结论,这两个键在关系数据库模式中起着至关重要的作用,因为它们在多个表之间建立关系。主键列始终存储表中每条记录的唯一值,而外键值可以重复。这两种约束结构是相同的,但它们的功能不同,因为主键唯一地标识了表或关系中的一条记录。外键将两个表链接在一起。
热门文章
优秀文章