温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

主键与外键有什么区别

发布时间:2025-12-02 09:29:19 来源:亿速云 阅读:135 作者:小樊 栏目:数据库

主键(Primary Key)和外键(Foreign Key)是关系型数据库中两种重要的约束,它们在数据库设计和数据完整性方面起着关键作用。以下是它们之间的主要区别:

主键(Primary Key)

  1. 唯一性:

    • 主键的值在整个表中必须是唯一的,不允许有重复。
    • 每个表只能有一个主键。
  2. 非空性:

    • 主键列不能包含NULL值。
  3. 标识作用:

    • 主键用于唯一标识表中的每一行记录。
  4. 索引:

    • 数据库系统通常会自动为主键创建一个唯一的索引,以提高查询效率。
  5. 实体完整性:

    • 主键约束确保了数据的实体完整性,即每一条记录都是可区分的。
  6. 命名约定:

    • 主键通常会有一个默认的约束名称,如PK_表名,但也可以自定义。

外键(Foreign Key)

  1. 引用完整性:

    • 外键用于建立和加强两个表数据之间的链接,它是一个表中的字段,该字段是另一个表的主键。
    • 外键约束确保了数据的引用完整性,即只有存在于被引用表中的值才能插入到外键列中。
  2. 可空性:

    • 外键列可以包含NULL值,表示该记录在被引用的表中没有对应的记录。
  3. 多对一关系:

    • 通常情况下,一个外键对应另一个表的一个主键,形成一对多的关系(一个父记录可以有多个子记录)。
  4. 级联操作:

    • 可以设置外键约束的级联操作,如CASCADE DELETE(删除父记录时自动删除子记录)或CASCADE UPDATE(更新父记录时自动更新子记录)。
  5. 命名约定:

    • 外键通常会有一个默认的约束名称,如FK_子表名_父表名,但也可以自定义。

示例

假设有两个表:Students 和 Classes。

  • Students 表有一个主键 StudentID。
  • Classes 表有一个主键 ClassID,并且有一个外键 StudentID 引用 Students 表的 StudentID。
CREATE TABLE Students (
    StudentID INT PRIMARY KEY,
    Name VARCHAR(100)
);

CREATE TABLE Classes (
    ClassID INT PRIMARY KEY,
    ClassName VARCHAR(100),
    StudentID INT,
    FOREIGN KEY (StudentID) REFERENCES Students(StudentID)
);

在这个例子中:

  • StudentID 在 Students 表中是主键。
  • StudentID 在 Classes 表中是外键,引用 Students 表的 StudentID。

通过这种方式,数据库可以确保 Classes 表中的 StudentID 始终指向 Students 表中的一个有效记录,从而维护数据的引用完整性。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手