Skip to content

数据库基础

在开始学习 SQL 之前,需要理解数据库的基本概念。本章将介绍数据库的核心概念、关系模型和基本术语,为后续学习打下坚实基础。

什么是数据库?

定义

数据库是一个有组织的数据集合,通常存储在计算机系统中。它允许用户高效地存储、检索和管理数据。

数据库管理系统(DBMS)

数据库管理系统(Database Management System)是用于创建、管理和操作数据库的软件。常见的 DBMS 包括:

  • MySQL
  • PostgreSQL
  • SQL Server
  • Oracle
  • SQLite

关系

数据库 ← 存储数据的地方
DBMS ← 管理数据库的软件
SQL ← 与 DBMS 交互的语言

关系数据库

核心概念

关系数据库是基于关系模型(Relational Model)的数据库系统,数据以表格(表)的形式存储。

表格示例

idnameagecity
1张三25北京
2李四30上海
3王五28广州

这是一个典型的数据库表,包含行和列。

数据库基本术语

1. 表(Table)

表是数据库中存储数据的基本单位,类似于 Excel 表格。

示例:用户表

sql
-- SQL 创建表
CREATE TABLE users (
    id INT,
    name VARCHAR(50),
    age INT,
    city VARCHAR(50)
);

2. 列(Column)

列定义了表中数据的类型和属性,也称为字段(Field)。

列的特性

  • 数据类型:定义列中数据的类型(整数、文本、日期等)
  • 约束:限制列中数据的规则(不能为空、必须唯一等)
  • 默认值:如果没有提供值时使用的默认值

示例:列定义

sql
CREATE TABLE products (
    id INT,                    -- 整数列
    name VARCHAR(100),         -- 文本列
    price DECIMAL(10,2),       -- 小数列
    stock INT DEFAULT 0,       -- 带默认值的列
    created_at DATE            -- 日期列
);

3. 行(Row)

行也称为记录(Record),是表中的一条完整数据。

示例:行数据

sql
-- 插入行数据
INSERT INTO users (id, name, age, city)
VALUES (1, '张三', 25, '北京');

4. 主键(Primary Key)

主键是表中唯一标识每一行的列,主键的值不能重复且不能为空。

主键的特点

  • 唯一性:每行的主键值必须唯一
  • 非空性:主键值不能为 NULL
  • 不变性:主键值通常不改变

示例:定义主键

sql
CREATE TABLE users (
    id INT PRIMARY KEY,        -- id 列是主键
    name VARCHAR(50),
    age INT
);

5. 外键(Foreign Key)

外键是一个表中的列,它引用另一个表的主键,用于建立表之间的关系。

外键的作用

  • 确保数据的一致性
  • 建立表之间的关联
  • 防止无效数据的插入

示例:外键关系

sql
-- 用户表
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

-- 订单表(引用用户表)
CREATE TABLE orders (
    id INT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10,2),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

6. 索引(Index)

索引是提高查询性能的数据结构,类似于书的目录。

索引的作用

  • 加快数据检索速度
  • 优化查询性能
  • 但会占用额外存储空间

示例:创建索引

sql
-- 为 name 列创建索引
CREATE INDEX idx_name ON users(name);

数据库结构

数据库 → 表 → 行列

数据库(Database)
  ├── 用户表(Table: users)
  │     ├── 列:id, name, age, city
  │     └── 行:(1, '张三', 25, '北京')
  └── 订单表(Table: orders)
        ├── 列:id, user_id, amount
        └── 行:(1, 1, 99.99)

层次结构

  1. 数据库服务器:运行 DBMS 的计算机
  2. 数据库:存储相关表的集合
  3. :存储相关数据的结构
  4. 行/列:实际的数据单元

关系模型

一对一关系(1:1)

一个表中的一条记录对应另一个表中的一条记录。

示例:用户和用户详情

users 表          user_details 表
id (PK)   →      user_id (FK, PK)
name             address
sql
-- 一个用户对应一个详细信息
SELECT u.name, d.address 
FROM users u
JOIN user_details d ON u.id = d.user_id;

一对多关系(1:N)

一个表中的一条记录对应另一个表中的多条记录。

示例:用户和订单

users 表          orders 表
id (PK)   →      user_id (FK)
name             order_id
                 amount
sql
-- 一个用户可以有多个订单
SELECT u.name, o.order_id, o.amount
FROM users u
JOIN orders o ON u.id = o.user_id;

多对多关系(M:N)

两个表中的记录可以相互对应多个。

示例:学生和课程

students 表      enrollments 表      courses 表
id (PK)    →     student_id (FK)    id (PK)
name             course_id (FK)      name
sql
-- 一个学生可以选修多门课程
-- 一门课程可以有多个学生
SELECT s.name, c.name
FROM students s
JOIN enrollments e ON s.id = e.student_id
JOIN courses c ON e.course_id = c.id;

常见数据类型

数值类型

类型说明示例
INT整数1, 2, 100
DECIMAL(M,D)小数123.45, 99.99
FLOAT浮点数3.14, 2.718
BIGINT大整数9223372036854775807

字符串类型

类型说明最大长度
CHAR(N)固定长度字符串255
VARCHAR(N)可变长度字符串65535
TEXT长文本65535+

日期时间类型

类型说明格式
DATE日期YYYY-MM-DD
TIME时间HH:MM:SS
DATETIME日期时间YYYY-MM-DD HH:MM:SS
TIMESTAMP时间戳YYYY-MM-DD HH:MM:SS

布尔类型

类型说明
BOOLEAN布尔值TRUE, FALSE

数据库设计原则

1. 数据规范化

规范化是组织数据库表的过程,目的是减少数据冗余和提高数据完整性。

2. 主键设计

  • 使用单一列作为主键
  • 使用自动增长的整数
  • 避免使用有业务含义的列

3. 命名规范

  • 使用有意义的名称
  • 使用小写字母和下划线
  • 避免使用保留字

实际示例:电商平台

数据库结构

sql
-- 用户表
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL,
    created_at DATETIME
);

-- 商品表
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    price DECIMAL(10,2) NOT NULL,
    stock INT DEFAULT 0
);

-- 订单表
CREATE TABLE orders (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT NOT NULL,
    total_amount DECIMAL(10,2),
    order_date DATETIME,
    FOREIGN KEY (user_id) REFERENCES users(id)
);

-- 订单详情表
CREATE TABLE order_items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT NOT NULL,
    price DECIMAL(10,2),
    FOREIGN KEY (order_id) REFERENCES orders(id),
    FOREIGN KEY (product_id) REFERENCES products(id)
);

数据关系

用户 (1) ←→ (N) 订单 (1) ←→ (N) 订单详情 (N) ←→ (1) 商品

数据库操作的基本流程

1. 连接数据库

sql
-- 连接到数据库服务器
mysql -u username -p

2. 选择数据库

sql
-- 使用特定的数据库
USE database_name;

3. 执行查询

sql
-- 执行 SQL 语句
SELECT * FROM users;

4. 断开连接

sql
-- 断开数据库连接
EXIT;

小结

本章介绍了数据库的基础概念:

  • 数据库定义:有组织的数据集合
  • 关系数据库:基于关系模型的数据库
  • 基本术语:表、列、行、主键、外键、索引
  • 数据类型:数值、字符串、日期时间、布尔
  • 关系类型:一对一、一对多、多对多
  • 设计原则:规范化、主键设计、命名规范

理解这些基本概念是学习 SQL 的基础,在接下来的章节中,我们将学习如何使用 SQL 来实际操作数据库。

下一步: 学习 SQL 基础语法,开始编写你的第一条 SQL 语句。