Skip to content

关系型数据库基础

一、核心概念

数据库 = 数据表(Table)的集合。一张表由**行(记录)列(字段)**组成:

user 表
┌────┬──────────┬────────────────────────────┐
│ id │ username │ password                   │
├────┼──────────┼────────────────────────────┤
│ 1  │ 小明      │ $2a$10$Xy...(BCrypt 密文) │
│ 2  │ 小红      │ $2a$10$Ab...              │
└────┴──────────┴────────────────────────────┘

关键术语:

术语含义商城例子
表 Table同类数据的集合userproductorder
主键 PK唯一标识一行id(自增)
外键 FK引用别的表的主键(建模关系)order.user_iduser.id
索引加速查询的数据结构username 上建索引
约束数据合法性规则NOT NULL、UNIQUE

二、关系(面试重点)

表之间用主外键表达关系,有三种:

一对一

一个用户一个扩展资料 → 两个表通过相同主键关联。

一对多(最常见)

一个分类下有多个商品:

category (1) ──< (多) product

多对多

一个用户买多个商品、一个商品被多个用户买 → 用中间表拆成两个一对多:

user ──< order_item >── product

多对多必须拆中间表,这是建表的核心技巧。

三、常用数据类型

类型用途商城例子
BIGINT大整数,主键id
VARCHAR(n)变长字符串用户名、地址
TEXT长文本商品描述
DECIMAL(10,2)精确小数(金额必用价格
INT整数库存、数量
DATETIME日期时间创建时间
TINYINT小整数/布尔状态、逻辑删除

金额不要用 FLOAT/DOUBLE

浮点存储小数有精度误差(0.1 + 0.2 ≠ 0.3)。金额一律用 DECIMAL

四、建库建表入门

sql
-- 建库
CREATE DATABASE mall DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE mall;

-- 建表
CREATE TABLE user (
    id          BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    username    VARCHAR(50)  NOT NULL UNIQUE,
    password    VARCHAR(100) NOT NULL,
    nickname    VARCHAR(50)  DEFAULT '',
    phone       VARCHAR(20)  DEFAULT NULL,
    created_at  DATETIME     DEFAULT CURRENT_TIMESTAMP,
    deleted     TINYINT      NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

要点:

  • utf8mb4:支持中文和 emoji(utf8 不够)
  • InnoDB:支持事务和外键(MyISAM 不支持事务)
  • AUTO_INCREMENT:主键自增
  • NOT NULL / DEFAULT:字段约束

五、增删改查入门

sql
-- 新增
INSERT INTO user (username, password) VALUES ('xiaoming', '密文');

-- 查询
SELECT * FROM user WHERE username = 'xiaoming';
SELECT id, username FROM user WHERE id > 5 ORDER BY id DESC LIMIT 10;

-- 更新
UPDATE user SET nickname = '小明同学' WHERE id = 1;

-- 删除(建议逻辑删除:UPDATE deleted=1,而非 DELETE)
UPDATE user SET deleted = 1 WHERE id = 1;

与 MyBatis-Plus 对应

MP 的 insert(entity)INSERTselectByIdSELECT * WHERE id=?selectPageSELECT ... LIMIT ?,?框架帮你生成的 SQL 就是这些。

六、本章自测

  1. 建一个 category 表(id, name, sort, deleted)。
  2. 插入 3 条分类数据。
  3. 查询并按 sort 排序。
  4. 说出 user 和 order、product 和 order_item 各是什么关系。

基于 MIT 协议发布,可自由学习与修改