名词解释 primary key 是什么意思_数据库主键和外键的区别?_主键必须是数字类型吗?

精选文章2周前发布 esoua
0 00
网盘资源搜索

什么是 primary key?先别急着翻字典

你刚打开数据库教程,第一行就撞见“PRIMARY KEY”——它到底是什么?不是密码,不是权限,更不是什么神秘代码,它其实就是一个“身份证号生成器”:给每一条记录发一个独一无二、绝不重复、且不能为空的编号。

比如,你开了一家小奶茶店,用 Excel 记录顾客订单。如果每单都靠“张三买了波霸奶茶”这种描述来查找,找三天也找不到昨天那单——但如果你给每单配个订单号:ORD20240521001、ORD20240521002……,问题立马清爽了。这个“订单号”,就是最朴素的 primary key 思想。

名词解释:primary key 是什么意思?

  • *Primary key(主键),直白说,就是一张数据表里专门被挑出来、用来唯一标识每一行数据的那个字段(或字段组合)**。它有三个铁律:
  • ? 唯一性:同一张表里,不能有两个一样的主键值;
  • ? 非空性:这一列绝对不允许填 NULL(空值)
  • ? 稳定性:一旦设好,尽量别改——改主键就像给活人换身份证号,容易牵连一堆关联操作。

> 小提醒:一个表只能有一个 primary key,但它可以由一个字段(比如 `id`),也可以由多个字段联合组成(比如 `order_id + product_code`),这叫复合主键——就像用“订单号+商品编码”才能准确定位某次下单里的某杯珍珠。

数据库主键和外键的区别?——像“本人”和“介绍人”

这个问题特别实际,新手常混。咱打个比方:

  • 主键(Primary Key) = 你本人的身份证号

→ 在你自己的档案表里,它是你的唯一身份凭证。

  • 外键(Foreign Key) = 你档案里写的“父亲身份证号”

→ 它本身不是你表的主键,但它必须对应另一张表的主键值(比如指向“家长信息表”的主键),用来建立两张表之间的逻辑关系。

| 对比项 | 主键(Primary Key) | 外键(Foreign Key) |

|————–|—————————–|———————————-|

| 所在位置 | 本表内 | 本表内,但值来源于另一张表的主键 |

| 是否允许重复 | ? 绝对不允许 | ? 允许(比如多个订单属于同一个客户) |

| 是否可为空 | ? 不可为空 | ? 可为空(取决于设计,如“暂无推荐人”) |

| 数量限制 | 一张表仅能有一个(可多字段) | 一张表可以有多个外键字段 |

举个真例子:

  • `users` 表中 `user_id` 是主键;
  • `orders` 表中 `user_id` 是外键——它不负责唯一标识订单,但它保证每个订单都“认得清”属于哪个用户。没有它,你就没法查“张三一共买了几杯奶茶”。

主键必须是数字类型吗?——答案是:完全不必!

很多人以为主键=自增ID=INT类型,其实这是最常见的做法,但不是硬性规定

? 可以是数字:`id INT PRIMARY KEY AUTO_INCREMENT`(MySQL 常见,简单高效)

? 可以是字符串:`order_no CHAR(12) PRIMARY KEY`(比如 `ORD20240521001`,业务含义清晰)

? 可以是 UUID:`uuid VARCHAR(36) PRIMARY KEY`(全局唯一,分布式系统友好)

? 甚至可以是组合:`(`country_code`, `phone_number`)`(联合做主键,确保国际手机号唯一)

我自己第一次做用户系统时,图省事全用自增 ID,结果后来要合并两个子系统的数据,ID 冲突到崩溃……后来才懂:主键选型不是看“顺不顺手”,而是看“稳不稳、扩不扩、读不读得懂”。业务场景变了,主键策略也得跟着呼吸。

最后一句大实话

别把 primary key 爱搜网盘资源搜索   www.esoua.com 当成教条背下来。它本质是一种设计约定,目的是让数据“不乱、好找、能联、可信赖”。你写第一张表时,不妨就问自己两句话:

  • 这张表里,哪一列(或哪几列)能让我100%确定地指出“就是这一条”?
  • 如果我删掉这一列,还能准确知道“这条记录是谁”吗?

如果答案是否定的——恭喜,你已经摸到主键的门把手了。

有时候,最好的学习方式,就是先建一张表,故意不设主键,然后试着查、改、联、删……卡住三次,你就永远记得它为什么重要了。

© 版权声明

相关文章