全书目录

第十八篇:MySQL 完全指南 —— 城市户籍总账宇宙

第三章:主键 —— 每份户籍都得有“系统内部总编号”

1 分钟 344 字 第 338 / 962 个阅读单元

主键 PRIMARY KEY 是一张表里最重要的唯一标识。

类比到城市户籍总账,主键就像:

“这份档案在总账楼里的内部编号。”

例如:

sql
citizen_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT

这表示:

  • 每个市民登记都有唯一编号
  • 这个编号不能重复
  • 这个编号不能为空
  • 新记录进来时,系统自动分配一个新号

很多初学者容易把“业务上唯一”与“表的主键”混为一谈。

更稳妥的设计通常是:

  • 用一个稳定、短小、纯系统内部的主键做 PRIMARY KEY
  • 再用业务上的自然标识做 UNIQUE

例如:

sql
CREATE TABLE citizens (
  citizen_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  national_id CHAR(18) NOT NULL UNIQUE,
  full_name VARCHAR(100) NOT NULL
) ENGINE=InnoDB;

这样做的好处是:

  • 主键不容易变
  • 业务字段变更时,不会牵动一大片关联关系
  • InnoDB 的很多底层组织方式都围绕主键展开

可以记一句很重要的话:

主键不只是“唯一”,还是 InnoDB 组织一张表的核心锚点。

所以主键最好满足:

  • 稳定
  • 不频繁修改
  • 真正唯一