主键约束(PRIMARY KEY)是数据库中用于唯一标识表中每一行记录的约束条件

发布时间:2026/7/12 19:27:03
主键约束(PRIMARY KEY)是数据库中用于唯一标识表中每一行记录的约束条件 主键约束PRIMARY KEY是数据库中用于唯一标识表中每一行记录的约束条件它同时强制实施非空NOT NULL和唯一UNIQUE两个特性从而确保实体完整性Entity Integrity——即每个实体行必须可被唯一、明确地识别且主键字段不能为NULL。一个表只能定义一个主键但主键可以由单个列或多个列组成后者称为复合主键。数据库系统会自动为该主键创建唯一索引以提升查询和约束检查效率。示例MySQL语法CREATETABLEstudents(idINTPRIMARYKEY,-- 单列主键nameVARCHAR(50)NOTNULL,ageINT);-- 或复合主键CREATETABLEorders(order_idINT,product_idINT,quantityINT,PRIMARYKEY(order_id,product_id)-- 联合主键);主键约束PRIMARY KEY与唯一约束UNIQUE的核心区别在于以下四点空值NULL处理✅ 主键列不允许任何 NULL 值自动隐含 NOT NULL✅ 唯一约束列允许一个或多个取决于数据库实现NULL 值SQL 标准规定NULL 不参与唯一性比较因此多个 NULL 被视为“不重复”如 MySQL、PostgreSQL、SQL Server 均允许多个 NULL但 Oracle 视 NULL 为“未知”多个 NULL 不违反 UNIQUE。数量限制✅ 一张表有且仅有一个主键可由单列或多个列组成✅ 一张表可定义多个唯一约束支持多列唯一、不同列组合的多种 UNIQUE 约束。功能定位与语义✅ 主键不仅保证唯一非空更承担标识实体的核心角色是定义外键引用的基础其他表的 FOREIGN KEY 必须引用主键或具有唯一约束非空的列但标准外键默认引用主键更安全明确✅ 唯一约束是业务层面的去重保障如邮箱、身份证号、手机号等需唯一但非主标识的字段不承担实体标识职责。索引行为✅ 主键自动创建聚簇索引Clustered Index在 SQL Server、MySQL InnoDB 中默认如此影响物理存储顺序✅ 唯一约束默认创建非聚簇索引Non-clustered IndexInnoDB 中唯一约束也生成 B 树索引但表数据仍按主键聚簇逻辑上独立不改变行物理组织。补充说明主键 ≡ UNIQUE NOT NULL 仅一个 可被外键引用 默认聚簇索引多数主流引擎UNIQUE 是更轻量、更灵活的唯一性保障机制适用于辅助业务规则。