Hello SQL

本博客主要参考自廖雪峰的官方网站,非常感谢廖老师的分享!

一、前言

1. 数据与数据库简介

一个程序总是由数据和逻辑组成的。如何和数据交互,高效可靠的交互,是一门非常重要的学问。其衍生出了数据库系统这一重要的计算机分支。

数据库软件的历史其实非常悠久,早在上世纪60年代就已经出现了。随着计算机技术的发展,数据库系统也经历了多次变革,从最初的层次模型和网状模型,到最常用的关系模型,再到新兴的面向对象模型和NoSQL数据库。

发展至今,用的最广泛的数据库系统仍是关系型数据库。其把数据看作是一个二维表格,任何数据都可以通过行号+列号来唯一确定。相比于另外两个模型,关系模型更符合人类的思维习惯,更容易理解和使用。

2. 关系型数据库

关系型数据库由多张“表(Table)”组成。每张表:

  • 像 Excel 表格一样
  • 行(Row) 表示一条记录
  • 列(Column) 表示属性
  • 表与表之间通过 关系(外键) 连接

下面我们通过一个具体的例子(学生选课系统)来说明关系型数据库的结构和概念。

1️⃣ 学生表(Student)

student_id name age
1 张三 20
2 李四 21
  • student_id:主键(唯一标识一个学生)
  • 每一行 = 一个学生

2️⃣ 课程表(Course)

course_id course_name
101 数学
102 英语
  • course_id:主键
  • 每一行 = 一门课程

3️⃣ 选课表(Enrollment)

enroll_id student_id course_id
1 1 101
2 1 102
3 2 101
  • student_id:外键 → Student 表
  • course_id:外键 → Course 表
  • 表示“哪个学生选了哪门课”

4️⃣ 表之间的关系

  • 一个学生 可以选多门课
  • 一门课 可以被多个学生选
  • 所以用一张 中间表(选课表) 来建立关系
1
学生(Student)  ←→  选课(Enrollment)  ←→  课程(Course)

5️⃣ 关系型数据库的核心特点

  • 存数据

  • 主键唯一标识数据

  • 外键建立表与表之间的关系

  • 可以用 SQL 查询,比如:

    • “张三选了哪些课?”
    • “数学课有哪些学生?”

3. 数据类型

对于一个关系表,除了定义每一列的名称外,还需要定义每一列的数据类型。关系数据库支持的标准数据类型包括数值、字符串、时间等。

名称 类型 说明(取值范围 / 举例)
INT 数值型(整数) 常见范围约 −2³¹ ~ 2³¹−1,如:-100100
SMALLINT 数值型(整数) 较小整数,约 −32768 ~ 32767
BIGINT 数值型(整数) 大整数,约 −2⁶³ ~ 2⁶³−1,如订单号
FLOAT 数值型(浮点) 单精度浮点数,如:3.14(可能有精度误差)
DOUBLE 数值型(浮点) 双精度浮点数,如:3.1415926
DECIMAL(p,s) 数值型(定点) 精确小数,p 为总位数,s 为小数位,如 DECIMAL(6,2)9999.99
CHAR(n) 字符串型 定长 n 个字符,如 CHAR(2)'男''女'
VARCHAR(n) 字符串型 变长字符串,最长 n 个字符,如 VARCHAR(20)'张三'
TEXT 字符串型 长文本,如文章内容、备注说明
DATE 时间型 日期,如 2025-10-01
TIME 时间型 时间,如 14:30:00
TIMESTAMP 时间型 日期+时间,如 2025-10-01 14:30:00
BOOLEAN 布尔型 TRUE / FALSE(或 1 / 0
BLOB 二进制型 二进制数据,如图片、音频文件
CLOB 字符大对象 大规模文本,如长文档、日志

4. 常见数据库

商用数据库,例如:Oracle,SQL Server,DB2等;
开源数据库,例如:MySQL,PostgreSQL等;
桌面数据库,以微软Access为代表,适合桌面应用程序使用;
嵌入式数据库,以Sqlite为代表,适合手机应用和桌面程序。

5. SQL

上面说了那么多理论的,我们实际实现是怎么做的呢?这就要用到SQL了。
SQL(Structured Query Language)是一种用于管理和操作关系型数据库的标准语言。它提供了一套丰富的语法,用于执行各种数据库操作,如查询、插入、更新和删除数据。