MySQL-黑马程序员
目录
- 一、基础篇
-
- 1. MySQL概述
-
- 1.1. 数据库相关概念
- 1.2. MySQL数据库
-
- 1.2.1. 版本
- 1.2.2. 下载
- 1.2.3. 安装
- 1.2.4. 启动停止
- 1.2.5. 客户端连接
- 1.2.6. 数据模型
-
- 1.2.6.1. 关系型数据库(RDBMS)
- 1.2.6.2. 数据模型
- 2. SQL
-
- 2.1. SQL通用语法
- 2.2. SQL分类
- 2.3. DDL
-
- 2.3.1. 数据库操作
- 2.3.2. 表操作
-
- 2.3.2.1. 表操作 - 查询创建
- 2.3.2.2. 表操作 - 数据类型
- 2.3.2.3. 表操作 - 修改
- 2.3.2.4. 表操作 - 删除
- 2.4. 图形化界面工具
- 2.5. DML
-
- 2.5.1. 添加数据
- 2.5.2. 修改数据
- 2.5.3. 删除数据
- 2.6. DQL
-
- 2.6.1. 基本语法
- 2.6.2. 基本查询(不带任何条件)
- 2.6.3. 条件查询(WHERE)
- 2.6.4. 聚合函数(count、max、min、avg、sum)
- 2.6.5. 分组查询(group by)
- 2.6.6. 排序查询(order by)
- 2.6.7. 分页查询(limit)
- 2.6.8. 执行顺序
- 2.7. DCL
-
- 2.7.1. 管理用户
- 2.7.2. 权限控制
- 3. 函数
-
- 3.1. 字符串函数
- 3.2. 数值函数
- 3.3. 日期函数
- 3.4. 流程函数
- 4. 约束
-
- 4.1. 概述
- 4.2. 约束演示
- 4.3. 外键约束
-
- 4.3.1. 介绍
- 4.3.2. 语法
- 4.3.3. 删除/更新行为
- 5. 多表查询
-
- 5.1. 多表关系
-
- 5.1.1. 一对多
- 5.1.2. 多对多
- 5.1.3. 一对一
- 5.2. 多表查询概述
-
- 5.2.1. 概述
- 5.2.2. 分类
- 5.3. 内连接
- 5.4. 外连接
- 5.5. 自连接
-
- 5.5.1. 自连接查询
- 5.5.2. 联合查询
- 5.6. 子查询
-
- 5.6.1. 概述
- 5.6.2. 标量子查询
- 5.6.3. 列子查询
- 5.6.4. 行子查询
- 5.6.5. 表子查询
- 6. 事务
-
- 6.1. 事务简介
- 6.2. 事务操作
- 6.3. 事务四大特性
- 6.4. 并发事务问题
- 6.5. 事务隔离级别
- 二、进阶篇
-
- 1. 存储引擎
- 2. 索引
- 3. SQL优化
- 4. 视图/存储过程/触发器
- 5. 锁
- 6. InnoDB核心
- 7. MySQL管理
- 三、运维篇
-
- 1. 日志
- 2. 主从复制
- 3. 分库分表
- 4.读写分离
一、基础篇
1. MySQL概述
1.1. 数据库相关概念
DB(数据库) 是数据本身,而 DBMS(数据库管理系统) 是创建、管理、操作这个数据库的软件。
关系:
① 创建与管理:DBMS 用于创建和管理 DB。没有 DBMS,我们无法有效地组织和访问大量数据。
② 交互中介:用户或应用程序永远不会直接操作 DB(数据文件),而是通过 DBMS 来发出指令(例如使用 SQL 语言)。DBMS 接收指令,然后才对底层的数据文件进行读写操作。
③ 功能提供者:DBMS 提供了所有关键功能,如:
○ 数据定义:创建数据库、表结构。
○ 数据操作:增、删、改、查数据。
○ 数据维护:数据备份、恢复、完整性检查。
○ 多用户并发控制:保证多个用户同时操作时数据的一致性。
○ 安全性管理:设置用户权限。
举例:
假设我们有一个 “公司员工管理系统”。
● DB(数据库):
○ 它实际上是服务器硬盘上的几个文件(如employee.mdf
,employee.ldf
)。
○ 这些文件里存储着所有具体的数据,例如:
•员工表
:(001, 张三, 工程师, 部门A)
•部门表
:(部门A, 研发部)
•工资表
:...
○ 这些数据的集合,就是数据库(DB)。它只是一堆二进制数据,静静地躺在硬盘上。
● DBMS(数据库管理系统):
○ 你需要在服务器上安装一个软件,比如 MySQL 或 Microsoft SQL Server。
○ 这个软件(DBMS)会负责:
① 当你执行CREATE DATABASE Company;
命令时,DBMS 在硬盘上创建出那些数据库文件(DB)。
② 当你执行SELECT * FROM 员工表 WHERE 姓名='张三';
时,DBMS 会接收这个SQL命令,在数据库文件(DB)中查找数据,并将结果返回给你。
③ 当HR要为新员工李四增加记录时,她通过应用程序界面操作,应用程序会向 DBMS 发送INSERT INTO ...
指令,由 DBMS 将新数据安全地写入数据库文件(DB)。
④ DBMS 还确保当HR在修改张三的工资时,财务无法同时删除张三的记录,这就是并发控制。
总结:
因此,DB是目的(存储什么),DBMS是手段(如何存储和管理)。我们通常所说的“使用Oracle数据库”或“使用MySQL数据库”,严格来说是指“使用Oracle DBMS”或“MySQL DBMS”来操作存储在其中的数据库(DB)。
- 主流的关系型数据库管理系统
类型 | 数据库名称 | 主要特点 / 简介 |
---|---|---|
商业数据库 | Oracle Database | 功能最强大、最复杂,常用于大型企业核心系统 |
Microsoft SQL Server | 与Windows/.NET生态集成度高,易用性强 | |
IBM Db2 | 以稳定性和处理海量数据见长,多见于金融领域 | |
开源数据库 | MySQL | 全球最流行的开源数据库,速度快,社区活跃 |
PostgreSQL | 功能先进,SQL标准兼容性好,支持高级数据类型 | |
MariaDB | MySQL的重要分支,完全兼容MySQL,更强调开源精神 | |
云数据库(DBaaS) | Amazon Aurora | 亚马逊云自研,兼容MySQL/PostgreSQL,高性能高可用 |
Azure SQL Database | 微软云托管的智能SQL Server服务 | |
Google Cloud SQL | 谷歌云托管服务,支持MySQL、PostgreSQL等 | |
阿里云 PolarDB | 阿里自研,兼容MySQL/PostgreSQL,云原生设计 |
说明:云数据库(DBaaS)是一种服务模式,其底层引擎通常基于前述的商业或开源数据库(如Amazon Aurora基于MySQL/PostgreSQL),但提供了免运维、高可用和弹性伸缩等云原生特性。
1.2. MySQL数据库
1.2.1. 版本
MySQL官方提供了两种不同的版本:
-
社区版本(MySQL Community Server)
免费,MySQL不提供任何技术支持 -
商业版本(MySQL Enterprise Edition)
收费,可以使用30天,官方提供技术支持
如下内容均基于 MySQL 社区版-MySQL Community Server 8.0.26 进行测试完成。
1.2.2. 下载
1.2.3. 安装
1.2.4. 启动停止
1.2.5. 客户端连接
1.2.6. 数据模型
1.2.6.1. 关系型数据库(RDBMS)
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
而所谓二维表,指的是由行和列组成的表,如下图(就类似于Excel表格数据,有表头、有列、有行,还可以通过一列关联另外一个表格中的某一列数据)。我们之前提到的MySQL、Oracle、DB2、SQLServer这些都是属于关系型数据库,里面都是基于二维表存储数据的。简单说,基于二维表存储数据的数据库就成为关系型数据库,不是基于二维表存储数据的数据库,就是非关系型数据库。
特点:
a. 使用表存储数据,格式统一,便于维护。
b. 使用SQL语言操作,标准统一,使用方便。
1.2.6.2. 数据模型
MySQL是关系型数据库,是基于二维表进行数据存储的,具体的结构图下:
- 我们可以通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库。
- 可以使用SQL语句,通过数据库管理系统操作数据库,以及操作数据库中的表结构及数据。
- 一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包
含多行记录。
2. SQL
全称 Structured Query Language,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。
2.1. SQL通用语法
在学习具体的SQL语句之前,先来了解一下SQL语言的通用语法。
(1)SQL语句可以单行或多行书写,以分号结尾。
(2)SQL语句可以使用空格/缩进来增强语句的可读性。
(3)MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。
(4)注释:
• 单行注释:-- 注释内容 或 # 注释内容
• 多行注释:/* 注释内容 */
2.2. SQL分类
SQL语句,根据其功能,主要分为四类:DDL、DML、DQL、DCL。
2.3. DDL
Data Definition Language,数据定义语言,用来定义数据库对象(数据库,表,字段)。
2.3.1. 数据库操作
(1)查询所有数据库
show databases;
(2)查询当前数据库
select database();
(3)创建数据库
create database [ if not exists ] 数据库名 [ default charset 字符集 ] [ collate 排序规则 ];
在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。(可以通过 if not exists 参数来解决这个问题,数据库不存在,则创建该数据库;如果存在,则不创建。)
(4)删除数据库
drop database [ if exists ] 数据库名;
如果删除一个不存在的数据库,将会报错。此时,可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
(5)切换数据库
use 数据库名;
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则是不能操作的。
2.3.2. 表操作
2.3.2.1. 表操作 - 查询创建
(1)查询当前数据库所有表
show tables;
(2)查看指定表结构
des 表名;
通过这条指令,我们可以查看到指定表的字段,字段的类型、是否可以为NULL,是否存在默认值等信息。
(3)查询指定表的建表语句
show create table 表名;
通过这条指令,主要是用来查看建表语句的,而有部分参数我们在创建表的时候,并未指定也会查询到,因为这部分是数据库的默认值,如:存储引擎、字符集等。
(4)创建表结构
CREATE TABLE 表名(字段1 字段1类型 [ COMMENT 字段1注释 ],字段2 字段2类型 [COMMENT 字段2注释 ],字段3 字段3类型 [COMMENT 字段3注释 ],......字段n 字段n类型 [COMMENT 字段n注释 ]
) [ COMMENT 表注释 ] ;
注意: [...] 内为可选参数,最后一个字段后面没有逗号
2.3.2.2. 表操作 - 数据类型
MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。
(1)数值类型
类型 | 含义 | 存储空间 | 取值范围(有符号 SIGNED) | 取值范围(无符号 UNSIGNED) | 描述 |
---|---|---|---|---|---|
整数类型 | |||||
TINYINT | 非常小的整数 | 1 字节 | -128 到 127 | 0 到 255 | 常用于状态值(如 0/1)、年龄等小范围数值。 |
SMALLINT | 小整数 | 2 字节 | -32,768 到 32,767 | 0 到 65,535 | 适用于中小范围数值。 |
MEDIUMINT | 中等整数 | 3 字节 | -8,388,608 到 8,388,607 | 0 到 16,777,215 | 不常用,介于 SMALLINT 和 INT 之间。 |
INT 或 INTEGER | 标准整数 | 4 字节 | -2,147,483,648 到 2,147,483,647 | 0 到 4,294,967,295 | 最常用的整数类型,如用户ID、订单号等。 |
BIGINT | 大整数 | 8 字节 | -2^63 到 2^63-1 | 0 到 2^64-1 | 用于非常大的数字,如科学计算、大数据量计数。 |
浮点数类型 | (近似值,可能存在精度损失) | ||||
FLOAT(M, D) | 单精度浮点数 | 4 字节 | 约 -3.4E+38 到 -1.1E-38, 0, 1.1E-38 到 3.4E+38 | M 是总位数,D 是小数点后的位数。例如 FLOAT(5,2) 可存储 -999.99 到 999.99 。 | |
DOUBLE(M, D) | 双精度浮点数 | 8 字节 | 约 -1.7E+308 到 -2.2E-308, 0, 2.2E-308 到 1.7E+308 | 精度比 FLOAT 更高,范围更大。用于科学计算数据。 | |
定点数类型 | (精确值,适用于金融计算) | ||||
DECIMAL(M, D) | 精确定点数 | 变长 | 取决于 M 和 D 的设定 | 最常用于需要精确计算的字段,如价格、金额。 M 是总精度(1~65),D 是小数位数(0~30)。默认是 DECIMAL(10,0) 。 |