主键 PRIMARY KEY 是一张表里最重要的唯一标识。
类比到城市户籍总账,主键就像:
“这份档案在总账楼里的内部编号。”
例如:
citizen_id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT这表示:
- 每个市民登记都有唯一编号
- 这个编号不能重复
- 这个编号不能为空
- 新记录进来时,系统自动分配一个新号
很多初学者容易把“业务上唯一”与“表的主键”混为一谈。
更稳妥的设计通常是:
- 用一个稳定、短小、纯系统内部的主键做
PRIMARY KEY - 再用业务上的自然标识做
UNIQUE
例如:
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 组织一张表的核心锚点。
所以主键最好满足:
- 短
- 稳定
- 不频繁修改
- 真正唯一