优秀的编程知识分享平台

网站首页 > 技术文章 正文

必须掌握的 SQL SERVER 主外键

nanyue 2025-04-29 02:53:14 技术文章 15 ℃

SQL SERVER 里面的主外键主要起到约束作用!



主键(Primary Key)

  • 是什么
    主键是表中
    唯一标识每一行数据的列(或列组合)。例如,身份证号、学号等唯一且不重复的值。
  • 核心特性
  • 唯一性:主键的值不能重复。
  • 非空性:主键的值不能为 NULL。
  • 唯一约束:一个表只能有一个主键(但可以由多个列组成)。
  • 作用
    确保数据唯一性,并作为其他表引用当前表的“锚点”。
  • 示例

  • CREATE TABLE Students ( StudentID INT PRIMARY KEY, -- 主键列 Name VARCHAR(50) );
  • 或显式命名主键约束:

  • CREATE TABLE Students ( StudentID INT, Name VARCHAR(50), CONSTRAINT PK_Students PRIMARY KEY (StudentID) );

外键(Foreign Key)

  • 是什么
    外键是表中
    指向另一个表主键的列。例如,订单表中的“客户ID”可以指向客户表的主键。
  • 核心特性
  • 引用完整性:外键的值必须在另一个表的主键中存在(或为 NULL)。
  • 非强制唯一:外键的值可以重复(如一个客户可以有多个订单)。
  • 作用
    建立表之间的关系,确保数据一致性(如防止插入无效的客户ID到订单表)。
  • 示例

  • CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT FOREIGN KEY REFERENCES Customers(CustomerID) -- 外键 );
  • 或显式命名外键约束:
  • CREATE TABLE Orders ( OrderID INT PRIMARY KEY, CustomerID INT, CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) );

  • 主键 vs 外键对比

    特性

    主键

    外键

    唯一性

    值必须唯一且非空

    值可以重复,允许 NULL(可选)

    数量限制

    一个表只能有一个主键

    一个表可以有多个外键

    作用目标

    标识本表数据

    指向其他表的主键

    自动创建索引

    默认创建聚集索引(可修改)

    不自动创建索引(需手动优化)


    实际场景示例

    1. 主键
    2. 学生表 Students 用 StudentID 作为主键,确保每个学生唯一。
    3. 外键
    4. 成绩表 Scores 中的 StudentID 是外键,指向 Students 表的主键。
    5. 插入成绩时,若 StudentID 不存在于学生表中,操作会被拒绝。

    级联操作(可选)

    外键可以定义级联行为,自动处理主表数据的变更:

    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        CustomerID INT,
        CONSTRAINT FK_Orders_Customers 
            FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
            ON DELETE CASCADE  -- 主表数据删除时,自动删除子表关联数据
            ON UPDATE SET NULL -- 主表数据更新时,子表外键设为 NULL
    );

    总结

    • 主键:身份证,唯一标识自己。
    • 外键:借书卡,通过它关联到图书馆的书籍记录。
    • 二者共同维护数据的准确性和关联性。
    最近发表
    标签列表