📚 目录
- [1. 数据库基础](#1. 数据库基础)
- [1.1 为什么要使用数据库](#1.1 为什么要使用数据库)
- [1.2 主流数据库](#1.2 主流数据库)
- [1.3 数据库核心概念](#1.3 数据库核心概念)
- [2. 库的操作](#2. 库的操作)
- [2.1 查看数据库](#2.1 查看数据库)
- [2.2 创建数据库与修改数据库](#2.2 创建数据库与修改数据库)
- [2.3 删除数据库](#2.3 删除数据库)
- [3. 数据类型](#3. 数据类型)
- [3.1 数值类型](#3.1 数值类型)
- [3.2 字符串类型](#3.2 字符串类型)
- [3.3 日期与特殊类型](#3.3 日期与特殊类型)
前言:
本篇为课堂完整 MySQL 入门笔记,后续会更新数据表操作、DML 增删改查系列内容。
1. 数据库基础
数据库发展经历五个阶段:人工管理 → 文件系统 → 层次/网状数据库 → 关系型数据库 → NoSQL/NewSQL 分布式数据库 。
核心演进逻辑:解决数据不能存、不能共享、冗余多、查询难、并发差、扩容难的问题。
1.1 为什么要使用数据库
- 数据持久化:持久存储数据,程序/服务器重启数据不会丢失;
- 数据结构化:规范结构化存储数据,方便统一管理查询;
- 数据完整性:保障数据准确、统一,避免脏数据;
- 并发控制:多程序并发共享访问,读写不冲突;
- 安全性:权限管控、数据加密保护数据;
- 可扩展性:支持水平/垂直扩容,适配海量数据;
- 备份和恢复:支持数据备份,误损坏可还原;
- 查询优化:内置优化器,快速执行复杂关联查询;
- 事务管理:事务保障操作要么全成、要么全失败;
- 多用户支持:允许多个用户同时操作数据库;
[🔙 返回目录](#🔙 返回目录)
1.2 主流数据库
主流数据库分为两大类:关系型数据库/非关系型数据库
关系型数据库:
1. Oracle :甲骨文商用库,性能顶尖 ,多用于大型项目,收费 ;
2. MySQL :开源免费 ,中小企业、电商论坛最常用 ,归属甲骨文;
3. PostgreSQL :伯克利开源库,可自由修改分发 ,功能完善;
4. SQL Server :微软数据库 ,适配Windows生态,适配中大型 项目;
5. SQLite :轻量零配置 ,占用资源极低,多用于手机、嵌入式 设备。
** 后续我将以MySQL这个数据库进行数据库相关操作**
非关系型数据库:
1. Redis :内存键值数据库,主打缓存,支持持久化与多数据结构 ;
2. MongoDB :文档型NoSQL,易扩展、高性能,支持复杂聚合查询 ;
3. Neo4j :图数据库,适用于关系图谱类业务。
[🔙 返回目录](#🔙 返回目录)
1.3 数据库核心概念
1. 数据库(DB) :长期存放在磁盘、有组织、可共享的数据集合,文件容器。
2. 数据库管理系统(DBMS) :管理、操控数据库的软件,如MySQL、Oracle。
3. 数据库系统(DBS) :完整运行环境,包含 DB + DBMS + 硬件 + 开发人员/用户。
4. 数据库管理员(DBA) :负责部署、维护、备份、优化数据库的运维人员。
5. SQL:结构化查询语言,通用标准,用来增删改查、管理数据库。
[🔙 返回目录](#🔙 返回目录)
2. 库的操作
2.1 查看数据库
| 语法 | show databases; |
|---|
注意:MySQL关键字是不区分大小写的!!!

不管我们使用哪一种方式,都能够正常输出;
为了可读性,我们统一使用小写来进行演示:
正规标准书写规范:
- SQL 关键字全部大写 (SHOW/CREATE/ALTER/DROP 等),自定义名称(库名、变量、占位符)小写
- 代码块单独分行 ,语法层级缩进对齐
- 每条语句末尾必须加分号 ;
- 注释统一:单行 -- +空格 (双横杠 + 空格),多行 /* */
- 表格表头加粗,语法模板与实操示例分开
安装耗MySQL之后默认给4个的数据库:
| 库名 | 核心作用 | 使用场景 |
|---|---|---|
| mysql | 权限系统库 | 存储账号、密码、权限、用户配置,登录/授权逻辑依赖此库,禁止随意删除 |
| information_schema | 元信息库 | 只读库,存放所有库、表、字段、索引、约束等元数据,查询表结构信息用 |
| performance_schema | 性能监控库 | 记录SQL执行、IO、锁、线程运行性能数据,用于慢查询、数据库调优 |
| sys | 简化视图库 | 基于performance_schema封装好的视图,提供易读的性能统计,快速排查慢SQL、锁等待 |
- 这4个库为MySQL运行必需,严禁执行 DROP 删除,删除会直接导致数据库服务异常;
- 日常业务库需要我们手动
CREATE DATABASE创建,上面4个仅系统内部使用; - information_schema、performance_schema、sys 仅支持查询,不允许修改、新增表。
[🔙 返回目录](#🔙 返回目录)
2.2 创建数据库与修改数据库
创建语法:
sql
create {database | schema} [if not exists] db_name [create_option] ...
create_option: [default] {
character set [=] charset_name
| collate [=] collation_name
| encryption [=] {'y' | 'n'}
}
| 语法片段 | 类型 | 功能说明 |
|---|---|---|
| create database / schema | 必选关键字 | 创建数据库,database与schema作用完全相同 |
| if not exists | 可选 | 避免库已存在时报错 |
| character set | 可选参数 | 设置数据库字符集,推荐utf8mb4 |
| collate | 可选参数 | 设置字符集校对排序规则 |
| encryption | 可选参数 | mysql8.0.16新增,设置数据库是否加密 |
- db_name 表示你要创建的数据库名字
- 符号{ } 中表示必选其中一个
- 符号 表示可选项
- 符号 | 表示选择其中一个
- character set 表示指定数据库采用的字符集编码
- collate 表示指定数据库字符编码集校验规则
- encryption表示是否这个数据库要加密
修改语法:
sql
alter {database | schema} [db_name]
alter_option ...
//具体可选项
alter_option: {
[default] character set [=] charset_name
| [default] collate [=] collation_name
| [default] encryption [=] {'y' | 'n'}
| read only [=] {default | 0 | 1}
}
| 语法片段 | 类型 | 功能说明 |
|---|---|---|
| alter database / schema | 必选关键字 | 修改数据库配置,database 与 schema 完全等效 |
| db_name | 可选 | 待修改的数据库名;省略则操作当前正在使用的库 |
| character set | 可选参数 | 修改数据库默认字符集,项目推荐 utf8mb4 |
| collate | 可选参数 | 修改字符集配套的校对、排序规则 |
| encryption | 可选参数 | mysql 8.0.16 新增,设置数据库加密,'y' 开启 / 'n' 关闭 |
| read only | 可选参数 | 数据库只读开关;1 开启只读,0 关闭,default 恢复默认 |
演示 :
sql
-- 1. 最简创建(库重复会报错,不推荐)
create database test_db;
-- 2. 安全创建(基础推荐写法)
create database if not exists test_db;
-- 3. 生产标准写法(指定字符集+校对规则)
create database if not exists test_db character set utf8mb4 collate utf8mb4_general_ci;
-- 4. MySQL8.0.16+ 带加密创建
create database if not exists test_db character set utf8mb4 encryption = 'Y';

注意事项:
- character set、collate、encryption 三者无强制先后顺序,任意调换都能执行;
- 可读性规范:collate 紧跟 character set 后,直观匹配字符集;
- if not exists 固定写在库名前,不能放到字符集等参数后方。
[🔙 返回目录](#🔙 返回目录)
2.3 删除数据库
语法:
sql
drop {database | schema} [if exists] db_name
| 语法片段 | 类型 | 功能说明 |
|---|---|---|
| drop database / schema | 必选关键字 | 删除数据库,database与schema作用完全相同 |
| if exists | 可选 | 数据库不存在时不会抛出报错,推荐日常使用 |
| db_name | 必选占位符 | 需要删除的数据库名称 |
代码演示 :
sql
-- 基础删除,库不存在会报错
drop database test_db;
-- 推荐安全写法,不存在不会抛出异常
drop database if exists test_db;
注意事项 :
删除是一项非常危险的操作!!!
在我们学习中删除一个自己的数据库没什么影响,但是要是在工作的时候要是不小心把公司数据库给删了,即使公司有备份,也会带来比较大的损失;损失严重可能会喜提一副玫瑰金手镯!!!
这就是网络上会有程序员删库跑路了!
[🔙 返回目录](#🔙 返回目录)
3. 数据类型
3.1 数值类型
| 分类 | 类型 | 大小 | 说明 |
|---|---|---|---|
| 整数类型 | bit(m) | 默认bit | 位值类型。m表示每个值的位数,取值范围为 1 ~ 64。如果省略m,则默认为 1。 |
| 整数类型 | tinyint(m) | 1byte | 取值范围 -2^7 ~ 2^7-1,无符号取值范围 2^8-1 |
| 整数类型 | bool | 1byte | tinyint(1)的同义词。值为零被认为是假,非零值被认为是true |
| 整数类型 | smallint(m) | 2byte | 取值范围 -2^15 ~ 2^15-1,无符号取值范围 2^16-1 |
| 整数类型 | mediumint(m) | 3byte | 取值范围 -2^23 ~ 2^23-1,无符号取值范围 2^24-1 |
| 整数类型 | int(m) | 4byte | 取值范围 -2^31 ~ 2^31-1,无符号取值范围 2^32-1 |
| 整数类型 | integer(m) | 4byte | int(m)的同义词 |
| 整数类型 | bigint(m) | 8byte | 取值范围 -2^63 ~ 2^63-1,无符号取值范围 2^64-1 |
| 浮点/定点类型 | float(m,d) | 4byte | 单精度浮点型,m是总位数,d是小数点后面的位数,大约可以精确到小数点后7位 |
| 浮点/定点类型 | double(m,d) | 8byte | 双精度浮点型,m是总位数,d是小数点后面的位数,大约可以精确到小数点后15位 |
| 浮点/定点类型 | decimal(m\[,d)] | 动态 | 不存在精度损失,m是总位数,d是小数点后的位数。decimal的最大位数(m)为65,最大小数位数(d)为30。如果省略m,则默认为10,如果省略d,则默认为0。m中不计算小数点和负数的号,如果d为0,则值没有小数点和小数部分。 |
- tinyint:状态标记(0/1,是否启用、是否删除),布尔场景直接用 tinyint (1) 替代 bool
- smallint:少量数字、年龄、等级
- int:日常业务主键、普通数字首选,绝大多数场景够用
- bigint:订单 id、海量自增主键、超大数字,防止数值溢出
- bit:极少用,存储标记位,一般不推荐
- float/double:禁止用于金额计算,存在精度丢失,仅用于不需要精确的科学数值
- decimal:金额、价格、财务计算专用,无精度损失,项目必用
[🔙 返回目录](#🔙 返回目录)
3.2 字符串类型
| 类型 | 说明 |
|---|---|
| char(m) | 固定长度字符串,m 表示长度,以字符为单位,取值范围 0 ~ 255,m 省略则长度为 1 |
| varchar(m) | 可变长度字符串,m 表示字符最大长度,取值范围 0 ~ 65535,有效字符个数取决于实际字符数和使用的字符集 |
| tinytext | 小文本类型,最大长度为 255 (2^8-1) 个字节,有效字符个数取决于使用的字符集 |
| text(m) | 文本类型,最大长度为 65535 (2^16-1) 个字节,有效字符个数取决于使用的字符集 |
| mediumtext | 中文本类型,最大长度为 16,777,215 (2^24-1) 个字节,有效字符个数取决于使用的字符集 |
| longtext | 大文本类型,最大长度为 4,294,967,295 即 4GB (2^32-1) 个字节,有效字符个数取决于使用的字符集 |
| binary(m) | 固定长度二进制字节,与 char 类似,但存储的是二进制字节而不是字符串。m 表示长度,以字节为单位,取值范围 0 ~ 255,m 省略则长度为 1 |
| varbinary(m) | 可变长度二进制字节,与 varchar 类似,但存储的是二进制字节而不是字符串。m 表示长度,以字节为单位 |
| tinyblob | 小二进制字节类型,最大长度为 255 (2^8-1) 个字节 |
| blob(m) | 二进制字节类型,最大长度为 65535 (2^16-1) 个字节 |
| mediumblob | 中二进制字节类型,最大长度为 16,777,215 (2^24-1) 个字节 |
| longblob | 大二进制字节类型,最大长度为 4,294,967,295 即 4GB (2^32-1) 个字节 |
| enum('value1','value2',...) | 枚举 1. 从值列表 'value1','value2' 或 ''(空字符串) 和 NULL 中选一个值 2. 最多可以有 65,535 个不同的元素 3. 单个元素的最大长度是 m <= 255 或 (m × w) <= 1020,其中 m 是元素字符长度,w 是字符集中字符所需的最大字节数 4. enum 的值在内部表示为整数 |
| set('value1','value2',...) | 集合 1. 从值列表 'value1','value2' 中选零个或多个值 2. 最多64个元素 3. 单个元素的最大长度是 m <= 255 或 (m × w) <= 1020,其中 m 是元素字符长度,w 是字符集中字符所需的最大字节数 4. set 值在内部表示为整数 |
- char:固定短文本,手机号、身份证、固定编码(长度固定)
- varchar:最常用,用户名、地址、备注、不定长短文本,优先选 varchar
- text:超长文本,文章内容、富文本,不做 where 索引查询
- blob:二进制文件(图片 / 文件二进制流),业务尽量存文件路径不存 blob
- enum:固定有限选项(性别、订单状态)
- set:多选标签,使用场景很少
[🔙 返回目录](#🔙 返回目录)
3.3 日期与特殊类型
| 类型 | 大小 | 说明 | 0值 |
|---|---|---|---|
| timestamp(fsp) | 4 bytes | 1. 时间戳类型 2. 支持范围 1970-01-01 00:00:01.000000 ~ 2038-01-19 03:14:07.499999 3. 0值为 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| datetime(fsp) | 8 bytes | 1. 日期类型和时间类型的组合 2. 支持范围 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.499999 3. 显示格式为 yyyy-mm-dd hh:mm:ss.fraction 4. 0值为 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| date | 3 bytes | 1. 日期类型 2. 支持范围 1000-01-01 ~ 9999-12-31 3. 显示格式为 yyyy-mm-dd 4. 0值为 0000-00-00 | 0000-00-00 |
| time(fsp) | 3 bytes | 1. 时间类型 2. 支持范围 -838:59:59.000000 ~ 838:59:59.000000 3. 显示格式为 hh:mm:ss.fraction 4. 0值为 00:00:00 | 00:00:00 |
| year(4) | 1 byte | 1. 4位格式的年份 2. 支持范围 1901 ~ 2155 3. 显示格式为 yyyy 4. 0值为 0 | 0 |
- datetime:业务通用首选,不受时区、2038 限制,范围最大
- timestamp:自动时区转换 ,最大缺点 2038 年上限,新项目不推荐做主时间
- date:只需要年月日(生日、订单日期)
- time:仅时长、时分秒,不存年月日
- year:仅年份场景
常用的数据类型 :
日常开发中,99% 场景只需要使用以下 10 种数据类型:
| 类型 | 用途说明 |
|---|---|
| int | 整数,最常用:年龄、id、数量、状态 |
| tinyint | 小整数:性别、是否删除、开关状态 |
| bigint | 大整数:订单号、超大id |
| decimal | 高精度小数:金额、价格、财务数据 |
| float | 小数:不需要精确计算的数值 |
| char | 固定长度字符串:手机号、身份证、编码 |
| varchar | 可变长度字符串:姓名、地址、标题(最常用) |
| text | 长文本:文章内容、详情、备注 |
| date | 日期:生日、订单日期 |
| datetime | 日期+时间:创建时间、更新时间(最常用) |
[🔙 返回目录](#🔙 返回目录)