MySQL 全套入门笔记:基础、库操作、数据类型

📚 目录

  • [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. 数据结构化:规范结构化存储数据,方便统一管理查询;
  3. 数据完整性:保障数据准确、统一,避免脏数据;
  4. 并发控制:多程序并发共享访问,读写不冲突;
  5. 安全性:权限管控、数据加密保护数据;
  6. 可扩展性:支持水平/垂直扩容,适配海量数据;
  7. 备份和恢复:支持数据备份,误损坏可还原;
  8. 查询优化:内置优化器,快速执行复杂关联查询;
  9. 事务管理:事务保障操作要么全成、要么全失败;
  10. 多用户支持:允许多个用户同时操作数据库;

[🔙 返回目录](#🔙 返回目录)


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关键字是不区分大小写的!!!

  不管我们使用哪一种方式,都能够正常输出;

为了可读性,我们统一使用小写来进行演示:

正规标准书写规范:

  1. SQL 关键字全部大写 (SHOW/CREATE/ALTER/DROP 等),自定义名称(库名、变量、占位符)小写
  2. 代码块单独分行语法层级缩进对齐
  3. 每条语句末尾必须加分号 ;
  4. 注释统一:单行 -- +空格 (双横杠 + 空格),多行 /* */
  5. 表格表头加粗,语法模板与实操示例分开

安装耗MySQL之后默认给4个的数据库:

库名 核心作用 使用场景
mysql 权限系统库 存储账号、密码、权限、用户配置,登录/授权逻辑依赖此库,禁止随意删除
information_schema 元信息库 只读库,存放所有库、表、字段、索引、约束等元数据,查询表结构信息用
performance_schema 性能监控库 记录SQL执行、IO、锁、线程运行性能数据,用于慢查询、数据库调优
sys 简化视图库 基于performance_schema封装好的视图,提供易读的性能统计,快速排查慢SQL、锁等待
  1. 这4个库为MySQL运行必需,严禁执行 DROP 删除,删除会直接导致数据库服务异常;
  2. 日常业务库需要我们手动 CREATE DATABASE 创建,上面4个仅系统内部使用;
  3. 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,则值没有小数点和小数部分。
  1. tinyint:状态标记(0/1,是否启用、是否删除),布尔场景直接用 tinyint (1) 替代 bool
  2. smallint:少量数字、年龄、等级
  3. int:日常业务主键、普通数字首选,绝大多数场景够用
  4. bigint:订单 id、海量自增主键、超大数字,防止数值溢出
  5. bit:极少用,存储标记位,一般不推荐
  6. float/double:禁止用于金额计算,存在精度丢失,仅用于不需要精确的科学数值
  7. 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 值在内部表示为整数
  1. char:固定短文本,手机号、身份证、固定编码(长度固定)
  2. varchar:最常用,用户名、地址、备注、不定长短文本,优先选 varchar
  3. text:超长文本,文章内容、富文本,不做 where 索引查询
  4. blob:二进制文件(图片 / 文件二进制流),业务尽量存文件路径不存 blob
  5. enum:固定有限选项(性别、订单状态)
  6. 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
  1. datetime:业务通用首选,不受时区、2038 限制,范围最大
  2. timestamp:自动时区转换最大缺点 2038 年上限,新项目不推荐做主时间
  3. date:只需要年月日(生日、订单日期)
  4. time:仅时长、时分秒,不存年月日
  5. year:仅年份场景

常用的数据类型 :

日常开发中,99% 场景只需要使用以下 10 种数据类型

类型 用途说明
int 整数,最常用:年龄、id、数量、状态
tinyint 小整数:性别、是否删除、开关状态
bigint 大整数:订单号、超大id
decimal 高精度小数:金额、价格、财务数据
float 小数:不需要精确计算的数值
char 固定长度字符串:手机号、身份证、编码
varchar 可变长度字符串:姓名、地址、标题(最常用)
text 长文本:文章内容、详情、备注
date 日期:生日、订单日期
datetime 日期+时间:创建时间、更新时间(最常用)

[🔙 返回目录](#🔙 返回目录)


相关推荐
XGeFei1 小时前
【Fastapi学习笔记(7)】—— Fastapi 中间件、前端跨域请求
笔记·学习·fastapi
lvbinemail1 小时前
【无标题】
数据库·postgresql·zabbix·监控
技术小甜甜2 小时前
[办公效率] Excel 表格越做越乱,先整理字段、格式还是公式?
数据库·excel·办公效率·数据整理
问心无愧05132 小时前
ctf show web入门109
android·前端·笔记
Data-Miner2 小时前
休闲食品行业数据分析平台建设方案,揭秘增长新引擎!
大数据·数据库·数据分析
invicinble2 小时前
sql层面语法的总结(mysql层面语法,主要侧重于sql的查询相关的信息量积累)
sql·mysql·oracle
KKKlucifer2 小时前
数据分类分级排名解析:三大核心能力决定选型方向
大数据·数据库·分类
fly spider2 小时前
Spring 原理总览:从启动到请求执行
java·数据库·spring
天天进步20152 小时前
Python全栈项目--基于Python的数据库管理工具
开发语言·数据库·python