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

在这里,我分析了主键和外键之间的区别,并将全面评估它们的优缺点。
什么是主键?
主键约束是关系型数据库管理系统中唯一标识表中每一行的列或一组列。它不能重复,意味着同一值在表中不应出现一次以上。
一个表不能超过一个主键。主键可以在列级别或表级别定义。如果您创建复合主键,则应在表级别定义。
主键示例
语法
下面是主键的语法
CREATE TABLE <Table-Name> ( Column1 datatype, Column2 datatype, PRIMARY KEY (Column-Name) . );
此处,
- Table_Name 是您要创建的表的名称。
- Column_Name 是具有主键的列的名称。
示例
学生 ID | 学号 | 名字 | 姓 | 电子邮件 |
---|---|---|---|---|
1 | 11 | 汤姆 | 价格 | abc@gmail.com |
2 | 12 | 尼克 | Wright | xyz@gmail.com |
3 | 13 | 达纳 | Natan | mno@yahoo.com |
在上面的例子中,我们创建了一个包含 StudID、Roll No.、First Name、Last Name 和 Email 等列的学生表。StudID 被选为主键,因为它能够唯一标识表中的其他行。
为什么使用主键?
在我处理数据库系统的这些年里,我注意到使用主键的这些缺点和好处。
- 主键的主要目的是标识数据库表中的每一个记录。
- 当您不允许某人输入空值时,您可以使用主键。
- 如果您删除或更新记录,将执行您指定的动作以确保数据完整性。
- 执行限制操作以拒绝父表的删除或更新操作。
- 当您物理组织 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… 参数描绘了需要添加到表中的列。
- Constraint 描述了您正在创建的约束的名称。
- References 指的是带有主键的表。
示例
DeptCode | DeptName |
---|---|
001 | 科学 |
002 | 英语 |
005 | 电脑 |
教师 ID | Fname | Lname |
---|---|---|
B002 | 大卫 | Warner |
B017 | Sara | Joseph |
B009 | Mike | Brunton |
在上面的例子中,我们有两个表:学校里的老师表和部门表。然而,没有办法看到哪个老师在哪个部门工作。
在此表中,通过将 Deptcode 中的外键添加到教师姓名中,我们可以创建两个表之间的关系。
教师 ID | DeptCode | Fname | Lname |
---|---|---|---|
B002 | 002 | 大卫 | Warner |
B017 | 002 | Sara | Joseph |
B009 | 001 | Mike | Brunton |
这个概念也称为参照完整性。
为什么使用外键?
根据我的经验,以下是实现外键的重要原因。
- 外键可帮助您使用父表中的主键迁移实体。
- 外键使您能够将两个或多个表链接在一起。
- 它使您的数据库数据一致。
- 外键可用于将列或列组合与父表中的主键进行匹配。
- SQL 外键约束用于确保子表中父表数据的参照完整性匹配值。
主键与外键的区别
让我分享一下主键和外键之间重要的区别,这是我亲身经历过的。
比较依据 | 主键 | 外键 |
---|---|---|
定义 | 主键约束是关系型数据库管理系统中唯一标识表中每一行的列或一组列。 | 外键是创建两个表之间关系的列。 |
基础版 | 它有助于唯一标识表中的记录。 | 它是表中的一个字段,该字段是另一个表的主键。 |
NULL | 主键从不接受空值。 | 外键可以接受多个空值。 |
索引 | 主键是聚集索引,DBMS 表中的数据按聚集索引的顺序物理组织。 | 外键不能自动创建索引,无论是聚集索引还是非聚集索引。 |
Count (计数) | 一个表中可以有一个主键。 | 一个表可以有多个外键。 |
删除 | 主键的值不能从父表中删除。 | 外键的值可以从子表中删除。 |
临时表 | 您可以在临时表中隐式定义主键。 | 您不能在本地或全局临时表上定义外键。 |
关系 | 主键是聚集索引。 | 默认情况下,它不是聚集索引。 |
重复 | 没有两行可以具有相同的主键值。 | 外键可以包含重复值。 |
插入 | 在向表列插入值时没有限制。 | 在向外键表中插入任何值时,请确保该值存在于主键的列中。 |
如何选择主键和外键
如我们所见,主键唯一标识表条目,外键跨表链接这些条目,两者对于维护数据完整性和实现高效数据检索至关重要。