MySQL 主键和外键的区别

MySQL 主键和外键的区别

MySQL中的键是构建两个表之间关系的基本要素。它们对于维护关系数据库结构非常有用。 它们之间的主要区别是主键用于标识表中的每条记录,而外键用于将两个表链接在一起 。在本文中,我们将根据各种参数讨论主键和外键之间的基本区别。在进行比较之前,我们将简要讨论这些键。

MySQL 主键和外键的区别

什么是主键?

主键是一种在表或关系中唯一标识每条记录的键。每个数据库需要为表中的每一行设置一个唯一标识符,而主键在唯一地标识表中的行方面起着重要作用。主键列不能存储重复值。它也被称为最小超键,因此在任何关系中我们不能指定多个主键。

例如 ,我们有一个名为 customer 的表,其属性包括ID、Name和City。只有ID列可以永远不包含重复和NULL值,因为每个顾客都有唯一的标识号。这个特性有助于唯一地标识数据库中的每条记录。因此,我们可以将ID属性设置为主键。

MySQL 主键和外键的区别

什么是外键?

外键是数据库中一组列,用于唯一标识另一个表中的另一条数据库记录,以维护引用完整性。它也被称为建立了两个不同表之间关系的引用键。外键始终与另一个表中的主键列匹配。这意味着一个表中的外键列引用了另一个表中的主键列。外键在关系型数据库规范化中非常有用,特别是当我们需要访问其他表中的记录时。

外键在父子表之间创建了一个父子关系,父表保存初始列值,而子表引用父表的列值。只有在子表上找到外键约束时,我们才能实现这种关系。

例如,我们有一个名为contact的表,其中包含ID、Customer_Id、Customer_Info和Type等属性。在这里,我们可以将Customer_Id列作为外键。

MySQL 主键和外键的区别

如果我们想要删除关系数据,从而从两个表中删除记录,我们可以在联系人表中定义外键,如下所示:

FOREIGN KEY (Customer_Id) REFERENCES customer(ID)   
ON DELETE CASCADE   
ON UPDATE CASCADE

当我们从客户表中删除任何记录时,联系表中的相关行也将被删除,并且两个表会自动更新。

主键和外键之间的主要区别

以下几点解释了主键和外键之间的区别:

  • 在关系数据库中,主键约束作为表中每一行的唯一标识符。相反,外键约束建立了两个不同表之间的关系,以唯一标识同一表或其他表的一行。
  • 主键列不存储NULL值,而外键可以接受多个NULL值。
  • 关系数据库中的每个表都不能定义多个主键,而可以在一个表中指定多个外键。
  • 我们不能删除父表中与子表的外键列引用的主键值。相反,我们可以删除子表的外键值,即使它们引用了父表的主键。
  • 主键是唯一且非空的约束,因此不能有两行具有相同的主键属性值,而外键字段可以存储重复值。
  • 我们可以无限制地向主键列中插入值。相反,在向外键表插入值时,我们需要确保该值存在于主键列中。
  • 我们可以隐式地在临时表上定义主键约束,但不能在临时表上强制执行外键约束。

主键 vs 外键比较表格

以下比较表格以简洁的方式解释了它们的主要区别:

对比依据 主键 外键
基本定义 用于唯一标识数据库表中的每条记录。 用于将两个表链接在一起。外键在一个表中指向另一个表的主键。
空值(NULL) 主键列的值永远不能为NULL。 外键列可以接受NULL值。
计数 一张表只能有一个主键。 一张表可以有多个外键。
重复 主键是唯一属性,因此在关系中不能存储重复的值。 外键列可以存储重复的值。
索引 主键默认是一个聚集索引,这意味着它会自动创建索引。 外键默认不是聚集索引。我们可以手动创建聚集索引。
删除 无法从表中删除主键值。如果要删除它,请确保引用的外键不包含其值。 可以从表中删除外键值,无需担心它是否引用了另一个表的主键。
插入 可以将值插入主键列,无论其是否存在于外键中。 不能将不在主键列中的值插入到引用的外键列中。
临时表 可以在临时表上定义主键约束。 不能在临时表上定义外键约束。
关系 无法在表中创建父子关系。 可以在表中创建父子关系。

结论

在本文中,我们对主键和外键约束进行了比较。我们得出的结论是,这两个键在关系数据库模式中起着重要的作用,它们建立了多个表之间的关系。主键列始终存储表中每个记录的唯一值,而外键值可以重复。约束结构相同,但它们的功能不同,主键用于唯一标识表或关系中的记录,而外键用于链接两个表。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程