数据库知识篇
什么是表、行与列
数据库里的"Excel表格"
关系型数据库用表(Table) 来组织数据。如果你用过 Excel,理解表就很容易——每个表就是一个 Sheet,行是记录,列是字段。
💡 类比:一张"学生表"就像班级花名册。每一行是一个学生,每一列是一个信息项(姓名、学号、年龄)。
加载图表中...
表的结构
users 表
| id | name | age | created_at | |
|---|---|---|---|---|
| 1 | 张三 | zhang@mail.com | 25 | 2024-01-01 |
| 2 | 李四 | li@mail.com | 30 | 2024-01-15 |
| 3 | 王五 | wang@mail.com | 28 | 2024-02-01 |
| 概念 | Excel 对应 | 说明 |
|---|---|---|
| 表名 | Sheet 名 | 如 users、articles |
| 列(字段) | 列标题 | 如 name、email |
| 行(记录) | 一行数据 | 如 "张三" 的所有信息 |
| 单元格 | 一个格子 | 如 "张三" |
列的数据类型
每一列都有固定的数据类型,就像 Excel 里设置单元格格式:
| 数据类型 | 说明 | 示例 |
|---|---|---|
INTEGER | 整数 | 1, 42, 100 |
VARCHAR(n) | 最大n个字符的字符串 | "张三", "hello" |
TEXT | 不限长度的文本 | 文章内容 |
BOOLEAN | 布尔值 | true, false |
TIMESTAMP | 时间戳 | 2024-01-01 12:00:00 |
DECIMAL | 精确小数 | 99.99 |
JSON | JSON 数据 | {"key": "value"} |
创建表:CREATE TABLE
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- 自增主键
name VARCHAR(100) NOT NULL, -- 姓名,不能为空
email VARCHAR(255) UNIQUE, -- 邮箱,不能重复
age INTEGER, -- 年龄
is_active BOOLEAN DEFAULT true, -- 是否激活,默认true
created_at TIMESTAMP DEFAULT NOW() -- 创建时间
);
加载图表中...
列的约束
| 约束 | 含义 | 作用 |
|---|---|---|
PRIMARY KEY | 主键 | 唯一标识每一行,不能重复不能为空 |
NOT NULL | 非空 | 这个字段必须有值 |
UNIQUE | 唯一 | 这个字段的值不能重复 |
DEFAULT | 默认值 | 不填时自动使用默认值 |
SERIAL | 自增 | 自动生成递增的数字(1, 2, 3...) |
主键:每行数据的"身份证"
主键(Primary Key) 是每行数据的唯一标识符,就像人的身份证号:
加载图表中...
- 主键不能重复(每个人身份证号唯一)
- 主键不能为空(必须有值)
- 通常用自增的
id作为主键
表与表的关系
实际项目中,多张表之间会有关联关系:
加载图表中...
外键关联
articles 表通过 user_id 关联到 users 表:
users 表:
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
articles 表:
| id | title | user_id |
|---|---|---|
| 1 | Hello World | 1 |
| 2 | 学习SQL | 1 |
| 3 | React入门 | 2 |
user_id = 1 表示这篇文章是张三写的。
CREATE TABLE articles (
id SERIAL PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT,
user_id INTEGER REFERENCES users(id), -- 外键,关联 users 表的 id
created_at TIMESTAMP DEFAULT NOW()
);
常见的表设计模式
一对多(最常见)
一个用户有多篇文章,一篇文章属于一个用户:
加载图表中...
多对多
一篇文章可以有多个标签,一个标签可以属于多篇文章:
加载图表中...
设计表时的建议
| 建议 | 说明 |
|---|---|
每张表都要有 id 主键 | 唯一标识每条记录 |
加上 created_at 字段 | 记录数据创建时间 |
| 字段名用小写+下划线 | user_name 而不是 userName |
| 表名用复数 | users 而不是 user |
| 适当拆表 | 不同类型的数据分到不同表 |
🎯 AI编程小贴士:设计数据库表结构时,告诉 AI 你的业务需求——比如"帮我设计一个博客系统的数据库,需要用户、文章、评论、标签",它会帮你设计表结构、字段类型和表之间的关联关系。
小结
- 表是数据库存储数据的基本单位,类似 Excel 的 Sheet
- 列(字段) 定义数据有哪些属性,每列有固定的数据类型
- 行(记录) 是一条具体的数据
- 主键是每行数据的唯一标识,通常用自增
id - 表与表之间通过外键建立关联(一对多、多对多)
- 设计表时记得加
id主键和created_at时间字段