主键和外键之间的区别
主键与外键之间的主要区别
- 主键约束是唯一标识关系数据库管理系统的表中每一行的列,而外键是在两个表之间创建关系的列。
- 主键永远不会接受空值,而外键可以接受多个空值。
- 一个表中只能有一个主键,但一个表中可以有多个外键。
- 主键的值不能从父表中删除,而外键的值可以从子表中删除。
- 对于主键来说,任何两行都不能具有相同的值;另一方面,外键可以包含重复的值。
- 在外键表中插入任何值时,将值插入表列中没有限制;确保该值存在于主键列中。

这里我分析了主键和外键的区别,并将综合评估他们的优缺点。
什么是主键?
主键约束是关系数据库管理系统表中唯一标识每一行的一列或一组列。它不能重复,这意味着相同的值不应该在表中出现多次。
一个表不能有多个主键。 主键 可以在列或表级别定义。如果创建复合主键,则应在表级别定义。
主键示例
语法:
以下是主键的语法:
CREATE TABLE <Table-Name> ( Column1 datatype, Column2 datatype, PRIMARY KEY (Column-Name) . );
在这里,
- Table_Name 是您必须创建的表的名称。
- Column_Name 是具有主键的列的名称。
示例:
学生编号 | 卷号 | 名字 | 姓氏 | 电子邮箱 |
---|---|---|---|---|
1 | 11 | Tom | 价格 | abc@gmail.com |
2 | 12 | Nick | 赖特 | xyz@gmail.com |
3 | 13 | 达纳 | 纳坦 | mno@yahoo.com |
在上面的例子中,我们创建了一个学生表,其中包含学生 ID、学号、名字、姓氏和电子邮件等列。选择学生 ID 作为主键是因为它可以唯一地标识表中的其他行。
为什么要使用主键?
在我处理数据库系统的这些年里,我注意到使用主键有以下缺点和好处:
- 主键的主要目的是识别数据库表中的每个记录。
- 当您不允许某人输入空值时,可以使用主键。
- 如果您删除或更新记录,将采取您指定的操作以确保数据完整性。
- 执行限制操作,拒绝针对父表的删除或者更新操作。
- 无论何时物理组织 DBMS 表,数据都会按照聚集索引的序列进行组织。
什么是外键?
外键是创建两个表之间关系的列。外键的目的是维护数据完整性并允许在实体的两个不同实例之间导航。它充当两个表之间的交叉引用,因为它引用另一个表的主键。数据库中的每个关系都应该由外键支持。
外键示例
语法:
以下是外键的语法:
CREATE TABLE <Table Name>( column1 datatype, column2 datatype, constraint (name of constraint) FOREIGN KEY [column1, column2...] REFERENCES [primary key table name] (List of primary key table column) ...);
在这里,
- 参数Table Name表示您要创建的表的名称。
- 参数column1、column2…表示需要添加到表中的列。
- 约束表示您正在创建的约束的名称。
- 引用指示具有主键的表。
示例:
部门代码 | 部门名称 |
---|---|
001 | 科学 |
002 | 英语 |
005 | 电脑 |
教师 ID | 名称 | 名称 |
---|---|---|
B002 | David | 华纳 |
B017 | 萨拉 | 约瑟夫 |
B009 | Mike | 布伦顿 |
在上面的例子中,我们有两张表:一个老师和一个学校的部门。但是,无法查看哪个搜索在哪个部门有效。
在此表中,通过在Deptcode中添加与老师姓名相关的外键,我们可以在两个表之间建立关系。
教师 ID | 部门代码 | 名称 | 名称 |
---|---|---|---|
B002 | 002 | David | 华纳 |
B017 | 002 | 萨拉 | 约瑟夫 |
B009 | 001 | Mike | 布伦顿 |
这个概念也称为参照完整性。
为什么要使用外键?
据我所知,实现外键的重要原因如下:
- 外键可帮助您使用父表中的主键迁移实体。
- A 外键 使您能够将两个或多个表链接在一起。
- 它使您的数据库数据保持一致。
- 外键可用于将列或列的组合与父表中的主键进行匹配。
- SQL 外键约束用于确保数据父级的引用完整性与子表中的值相匹配。
主键和外键的区别
我来分享一下我亲身经历过的主键和外键之间的重要区别:
比较基础 | 首要的关键 | 外键 |
---|---|---|
定义 | 主键约束是唯一标识表中每一行的一列或一组列 关系数据库管理系统. | 外键是在两个表之间建立关系的列。 |
基础 | 它可以帮助您唯一地标识表中的记录。 | 它是表中的一个字段,是另一个表的主键。 |
无 | 主键永不接受空值。 | 外键可以接受多个空值。 |
索引 | 主键是一个聚集索引,DBMS表中的数据在物理上是按照聚集索引的顺序组织的。 | 外键不能自动创建索引,无论是聚集索引还是非聚集索引。 |
计数 | 一个表中可以有一个主键。 | 一个表中可以有多个外键。 |
缺失 | 不能从父表中删除主键的值。 | 可以从子表中删除外键的值。 |
临时表 | 您可以在临时表中隐式定义主键。 | 您不能在本地或全局临时表上定义外键。 |
关系 | 主键是一个聚集索引。 | 默认情况下,它不是一个聚集索引。 |
复制 | 任何两行都不能具有相同的主键值。 | 外键可以包含重复的值。 |
插入 | 对表列中插入值没有限制。 | 在外键表中插入任何值时,请确保该值存在于主键列中。 |
如何在主键和外键之间进行选择
据我们所知,主键唯一地标识表条目,外键跨表链接这些条目,这对于维护数据完整性和促进高效的数据检索都至关重要。