Step 1:创建学习数据库
1.1 用 pgAdmin 连接(推荐)
-
开始菜单打开 pgAdmin 4
-
左侧 Servers → PostgreSQL 18 ,输入安装时设的
postgres密码 -
右键 Databases → Create → Database
-
名称填:
nodejs_study→ Save
Step 2:在 PostgreSQL 里建表
把数据库想象成 Excel 工作簿,表(Table) 就是一张 Sheet:
| 概念 | 类比 Excel | 例子 |
|---|---|---|
| 数据库 Database | 整个 .xlsx 文件 |
nodejs_study |
| 表 Table | 一张 Sheet | users、todos |
| 行 Row | 一行数据 | 张三这个用户 |
| 列 Column | 一列表头 | email、name |
| 主键 PK | 每行唯一编号 | id = 1, 2, 3... |
| 外键 FK | 「这行属于谁」的引用 | todos.user_id → users.id |
你现在的 Todo 项目数据在内存数组里,重启服务就没了。建表之后,数据会持久存在硬盘上。
Primary key(主键)
作用: 唯一标识每一行。
-
每一行的主键值不能重复
-
主键列不能为空
-
一张表通常只有 1 个主键(可以是单列,也可以是多列组合)
例如表里
| 列 | 是否主键 | 说明 |
|---|---|---|
id |
✅ 是 | 每行唯一编号,适合当主键 |
title |
❌ 否 | 标题可能重复,不适合做主键 |
done |
❌ 否 | 只有 true/false,会大量重复 |
所以常见做法是:只给 id 设 Primary key,用自增整数当「身份证号」。
Not NULL(非空 / 必填)
作用: 这一列必须有值,不能留空。
-
开启 Not NULL = 插入数据时必填
-
关闭 Not NULL = 可以为 NULL(空)
你的表
| 列 | Not NULL | 含义 |
|---|---|---|
id |
✅ | 必须有值(主键本身就不能空) |
title |
✅ | 标题必填 |
done |
✅ | 必须填 true 或 false;你有默认值 false,所以即使不写也会自动填 |
Not NULL ≠ Primary key,是两回事:
| 约束 | 含义 |
|---|---|
| Not NULL | 不能为空 |
| Primary key | 不能为空 且 不能重复 且 用来唯一标识一行 |
数据类型有哪些?
PostgreSQL 里类型很多,日常最常用的有这些:
数字
| 类型 | 用途 | 例子 |
|---|---|---|
integer / int |
整数 | 1, 100 |
bigint |
大整数 | 很大的 ID |
serial |
自增整数(实际是 integer + 序列) | 主键 id |
numeric(p,s) |
精确小数 | 金额 99.99 |
real / double precision |
浮点数 | 科学计算 |
文本
| 类型 | 用途 | 例子 |
|---|---|---|
character varying(n) / varchar(n) |
可变长度字符串,最多 n 个字符 | title VARCHAR(200) |
text |
不限长度文本 | 长文章、备注 |
char(n) |
固定长度字符串 | 较少用 |
布尔
| 类型 | 用途 | 例子 |
|---|---|---|
boolean |
真/假 | done: true / false |
日期时间
| 类型 | 用途 | 例子 |
|---|---|---|
date |
日期 | 2026-06-22 |
time |
时间 | 14:30:00 |
timestamp |
日期 + 时间 | 2026-06-22 14:30:00 |
其他常见
| 类型 | 用途 |
|---|---|
json / jsonb |
存 JSON 数据 |
uuid |
全局唯一 ID |
bytea |
二进制数据 |