数据库知识复习01

第一部分:MySQL 数据库

1 数据库介绍

1.1 什么是数据库

  • 数据:描述事物的符号记录,可以是数字、文字、图形、图像、声音、语言等,经过数字化后可存入计算机。

  • 数据库:存储数据的仓库,是长期存放在计算机内、有组织、可共享的大量数据的集合。数据库中的数据按特定数据模型组织、描述和存储,核心特点包括:

    1. 数据结构化

    2. 共享性高、冗余度低、易扩充

    3. 数据独立性高

    4. 由 DBMS 统一管理和控制(涵盖安全性、完整性、并发控制、故障恢复等)

1.2 什么是数据库管理系统

数据库系统成熟的标志是数据库管理系统的出现,其核心定义与功能如下:

  • 全称:DataBase Management System(简称 DBMS)

  • 本质:管理数据库的专用软件,充当所有数据的知识库,负责数据的存储、安全、一致性、并发操作、恢复和访问。

  • 核心价值

    1. 实现数据的快速检索和维护;

    2. 保障数据的安全性、完整性、并发控制和数据恢复;

    3. 内置数据字典(又称系统表),存储元数据(关于数据的数据,如数据的名字、结构、位置和类型)。

1.3 常见数据库分类

数据库主要分为关系型数据库和非关系型数据库(NoSQL)两大类,具体说明如下:

1.3.1 关系型数据库
  • 核心定义:建立在关系模型基础上的数据库,借助集合代数等数学概念处理数据。现实世界中的实体及实体间联系均通过关系模型表示,本质是由多张可互相联接的二维行列表格组成。

  • 关系模型:即二维表格模型,关系型数据库由二维表及表间联系构成数据组织。

  • 主流产品:Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL、浪潮 K-DB、武汉达梦、南大通用、人大金仓等。

  • 设计工具:实体关系模型(E-R 模型),通过实体 - 关系图表示数据库概念设计,助力设计构思与沟通。

1.3.2 非关系型数据库
  • 核心定义:又称 NoSQL(Not Only SQL),意为 "不仅仅是 SQL",是轻量、开源、不兼容 SQL 功能的数据库。最普遍定义是 "非关联型",核心强调 Key-Value 存储和文档数据库的优点,而非单纯反对 RDBMS(关系型数据库管理系统)。

2 MySQL 服务器部署

Linux 系统 中通过 官方 YUM 仓库 部署 MySQL 8.4 LTS 版本的完整流程,包含下载、安装、验证、卸载清理全步骤。

2.0 安装前说明

  • 安装环境:Linux(CentOS/RHEL/Rocky 9 系列)

  • 安装方式:官方 YUM 仓库在线安装(最稳定、最推荐)

  • 安装版本:MySQL 8.4.3 LTS(长期支持版)

  • 官方下载地址:MySQL 官网

2.1 官方下载页面导航

  1. 打开 MySQL 官方首页

  2. 找到顶部导航栏 【DOWNLOADS】 选项卡,进入下载页面

  3. 在下载页面中选择 【MySQL Community (GPL) Downloads】(社区免费版)

  4. 社区版页面提供三种安装方式:

    • MySQL Yum Repository:YUM 在线仓库安装

    • MySQL Community Server:二进制 / 源码手动安装

    • MySQL Installer for Windows:Windows 老版本安装工具

2.2 配置 MySQL YUM 在线仓库

2.2.1 下载并安装官方 YUM 仓库

我们直接在 Linux 系统中使用 wget / rpm 命令安装官方仓库,无需手动下载上传。

执行以下命令安装 MySQL 8.4 官方 YUM 源:

复制代码
# 下载仓库安装包
wget https://repo.mysql.com/mysql84-community-release-el9-1.noarch.rpm

# RPM 方式安装仓库(二选一执行即可,推荐直接 rpm 安装)
rpm -i mysql84-community-release-el9-1.noarch.rpm

# 或者直接通过网络链接安装(无需提前下载)
rpm -i https://repo.mysql.com/mysql84-community-release-el9-1.noarch.rpm

安装过程可能出现密钥提示,属于正常现象:

复制代码
warning: /var/tmp/rpm-tmp.QsZluK: Header V4 RSA/SHA256 Signature, key ID a8d3785c: NOKEY

2.2.2 验证仓库是否安装成功

安装完成后,查看系统可用仓库,确认 MySQL 仓库已添加:

复制代码
dnf repolist

出现以下仓库即表示成功:

复制代码
mysql-8.4-lts-community           MySQL 8.4 LTS Community Server
mysql-connectors-community         MySQL Connectors Community
mysql-tools-8.4-lts-community      MySQL Tools 8.4 LTS Community

2.3 安装 MySQL 8.4 服务器

使用 dnf 命令直接安装 MySQL 服务器包,系统会自动解决依赖

复制代码
dnf install mysql-server -y

2.3.1 安装过程说明

执行后系统会自动:

  1. 下载 mysql-community-server 主程序

  2. 自动安装依赖包(client、libs、plugins、common 等)

  3. 导入 MySQL 官方 GPG 密钥

  4. 完成完整安装

典型安装日志如下:

复制代码
Dependencies resolved.
Install  6 Packages
Total download size: 59 M
Installed size: 330 M

Importing GPG key 0xA8D3785C:
Userid : "MySQL Release Engineering <mysql-build@oss.oracle.com>"
From   : /etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023

Installed:
  mysql-community-server
  mysql-community-client
  mysql-community-client-plugins
  mysql-community-common
  mysql-community-icu-data-files
  mysql-community-libs
Complete!

安装完成!当前版本:MySQL 8.4.3-1.el9

2.4 MySQL 卸载与完全清理

如果需要重装、更换版本,可执行以下命令彻底清理 MySQL,不留残留文件。

复制代码
# 1. 卸载 mysql-server
dnf remove mysql-server -y

# 2. 删除数据目录
rm -rf /var/lib/mysql

# 3. 删除日志文件
rm -rf /var/log/mysqld.log

# 4. 删除 mysql 用户及残留文件
userdel -r mysql

执行后可能出现提示:

复制代码
userdel: mysql mail spool (/var/spool/mail/mysql) not found
userdel: mysql home directory (/var/lib/mysql) not found

属于正常现象,不影响清理结果。

2.5 二进制本地安装(RPM Bundle 方式)

二进制本地安装适用于无网络环境或需精准控制安装包版本的场景,通过下载官方 RPM 捆绑包,本地解压后安装,步骤如下:

2.5.1 安装前清理(可选,避免冲突)

若之前安装过 MySQL 相关组件,先执行清理操作:

复制代码
# 卸载已安装的 MySQL 服务
dnf remove mysql-server -y
# 删除数据目录
rm -rf /var/lib/mysql
# 删除日志文件
rm -rf /var/log/mysqld.log
# 删除 MySQL 用户
userdel -r mysql

注:执行 userdel 时若提示 "目录不存在",属于正常现象,不影响清理效果。

2.5.2 下载 RPM 捆绑包

  1. 导航至 MySQL 官方下载页面:

    • 进入 MySQL 官网 → 【DOWNLOADS】→ 【MySQL Community (GPL) Downloads】→ 【MySQL Community Server】
  2. 选择下载类型:

    • 在下载列表中找到【RPM Bundle】选项(对应系统版本:el9.x86_64),点击【Download】进入确认页面
  3. 下载安装包:

    • 方式 1:浏览器下载后上传至 Linux 服务器

    • 方式 2:Linux 系统中直接用 wget 命令下载(推荐):

      复制代码
      wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.3-1.el9.x86_64.rpm-bundle.tar

提示:文档中部分下载链接因时效问题可能出现 "link dead" 报错,可前往 MySQL 官网获取最新 RPM Bundle 下载地址。

2.5.3 解压 RPM 捆绑包

下载完成后,执行解压命令,查看包含的所有 RPM 组件:

复制代码
# 解压 tar 包(无需指定解压目录,直接解压到当前目录)
tar xf mysql-8.4.3-1.el9.x86_64.rpm-bundle.tar

# 查看解压后的 RPM 文件
ll mysql-*

解压后会生成多个 RPM 包,核心组件包括:

  • mysql-community-server-8.4.3-1.el9.x86_64.rpm(服务端主程序)

  • mysql-community-client-8.4.3-1.el9.x86_64.rpm(客户端工具)

  • mysql-community-libs-8.4.3-1.el9.x86_64.rpm(依赖库)

  • mysql-community-common-8.4.3-1.el9.x86_64.rpm(公共组件)

  • 其他辅助组件(如 debug 包、devel 包,按需安装)

2.5.4 本地安装 MySQL 组件

使用 dnf localinstall 命令安装核心服务端组件(自动解决依赖关系):

复制代码
# 安装服务端主程序(会自动安装所需依赖组件)
dnf localinstall mysql-community-server-8.4.3-1.el9.x86_64.rpm -y

2.5.5 安装过程说明

执行命令后,系统会自动:

  1. 解析依赖(客户端、libs、common 等组件)

  2. 下载缺失的依赖包(约 8.9MB)

  3. 验证并安装所有组件,最终安装 6 个核心包,总安装大小约 330MB

  4. 安装完成后提示 Complete!,表示 MySQL 服务端已安装成功

2.6 容器平台安装(Docker 方式)

通过 Docker 容器安装 MySQL,无需复杂环境配置,隔离性强、部署快速,步骤如下:

2.6.1 安装前清理(可选)

清理旧版 Docker 或 MySQL 残留:

复制代码
# 卸载旧版 Docker 相关组件
dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc -y

# 清理 MySQL 残留(同 2.2.1 步骤)
dnf remove mysql-server -y
rm -rf /var/lib/mysql /var/log/mysqld.log
userdel -r mysql

2.6.2 配置 Docker YUM 仓库

  1. 安装 Docker 依赖工具:

    复制代码
    dnf -y install dnf-plugins-core
  2. 添加 Docker 官方 YUM 仓库:

    复制代码
    dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

    仓库配置详情(来自文档内置配置):

    复制代码
    [docker-ce-stable]
    name=Docker CE Stable - $basearch
    baseurl=https://download.docker.com/linux/rhel/$releasever/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://download.docker.com/linux/rhel/gpg
    
    [docker-ce-stable-source]
    name=Docker CE Stable - Sources
    baseurl=https://download.docker.com/linux/rhel/$releasever/source/stable
    enabled=0
    gpgcheck=1
    gpgkey=https://download.docker.com/linux/rhel/gpg
    
    [docker-ce-test]
    name=Docker CE Test - $basearch
    baseurl=https://download.docker.com/linux/rhel/$releasever/$basearch/test
    enabled=0
    gpgcheck=1
    gpgkey=https://download.docker.com/linux/rhel/gpg

2.6.3 安装 Docker 相关组件

复制代码
dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

安装完成后,会自动部署 10 个组件,包括:

  • docker-ce(Docker 引擎核心)

  • docker-ce-cli(Docker 命令行工具)

  • containerd.io(容器运行时)

  • 其他辅助插件(buildx、compose 等)

2.6.4 启动 Docker 服务

复制代码
# 设置 Docker 开机自启并立即启动
systemctl enable --now docker

验证 Docker 状态:

复制代码
systemctl status docker

显示 active (running) 表示启动成功。

2.6.5 拉取 MySQL 8.4.3 镜像

复制代码
# 拉取指定版本的 MySQL 镜像(8.4.3)
docker pull mysql:8.4.3

拉取完成后,查看镜像:

复制代码
docker images

会显示 mysql:8.4.3 镜像,大小约 594MB。

2.6.6 启动 MySQL 容器

复制代码
# 创建并启动 MySQL 容器
# --name:容器名称(mysqltest)
# -e MYSQL_ROOT_PASSWORD:设置 root 密码(123456)
# -d:后台运行容器
docker run --name mysqltest -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.4.3

2.6.7 验证容器与 MySQL 服务

  1. 查看运行中的容器:

    复制代码
    docker ps

    会显示容器 ID、镜像名称、状态(Up 表示运行中)。

  2. 进入容器并登录 MySQL:

    复制代码
    # 进入容器终端(交互式)
    docker exec -it mysqltest /bin/bash
    # 登录 MySQL(输入设置的密码 123456)
    mysql -uroot -p
  3. 测试 MySQL 功能:

    复制代码
    -- 查看 MySQL 版本
    select version();
    -- 查看默认数据库
    show databases;

    正常输出版本号(8.4.3)和默认数据库列表,说明安装成功。

2.6.8 容器与镜像管理(可选)

  1. 停止并删除容器:

    复制代码
    # 停止容器
    docker stop mysqltest
    # 删除容器
    docker rm mysqltest
  2. 镜像导出与导入(无网络环境可用):

    复制代码
    # 导出镜像为本地文件(MySQL843.tar)
    docker save -o MySQL843.tar mysql:8.4.3
    
    # 导入本地镜像文件
    docker load -i MySQL843.tar

三种安装方式对比总结

安装方式 优点 缺点 适用场景
YUM 在线仓库 自动解决依赖、安装简单、易升级 依赖网络、版本受仓库限制 有网络环境、快速部署
二进制本地(RPM Bundle) 无网络依赖、版本精准控制 需手动解压、依赖需手动处理 无网络环境、定制化安装
Docker 容器 环境隔离、部署快速、无冲突 依赖 Docker 环境、性能略有损耗 开发 / 测试环境、快速迭代

2.7 MySQL 源码部署

源码部署适合需要高度定制化、优化编译、无网络环境的场景,编译过程较长,但可灵活控制功能与路径。环境:Linux EL9 系统,MySQL 8.4.3 源码版本。

2.7.1 下载源码包

进入 MySQL 官网下载页面,选择 Source Code 下载。也可直接在 Linux 使用 wget 下载:

复制代码
wget https://cdn.mysql.com/Downloads/MySQL-8.4/mysql-8.4.3.tar.gz

2.7.2 安装前环境清理

复制代码
dnf remove mysql-server -y
rm -rf /var/lib/mysql
rm -rf /var/log/mysqld.log
userdel -r mysql

2.7.3 创建目录并移动源码

复制代码
mkdir /mysql
mv mysql-8.4.3.tar.gz /mysql
cd /mysql
ll

2.7.4 解压源码

复制代码
tar xf mysql-8.4.3.tar.gz
cd mysql-8.4.3
pwd

2.7.5 创建专用用户与权限

复制代码
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chmod 777 /mysql/ -R

2.7.6 安装编译依赖

复制代码
dnf install cmake openssl-devel ncurses-devel rpcgen gcc-toolset-12-gcc gcc-toolset-12-gcc-c++ gcc-toolset-12-binutils -y

安装额外依赖包:

复制代码
rpm -i https://yum.oracle.com/repo/OracleLinux/OL9/codeready/builder/x86_64/getPackage/libtirpc-devel-1.3.3-9.el9.x86_64.rpm

2.7.7 创建编译目录并编译

复制代码
mkdir bld
cd bld
cmake ..
make
make install

编译时间较长,耐心等待。

2.7.8 初始化 MySQL

复制代码
cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

bin/mysqld --initialize --user=mysql

记住输出的临时密码,例如:

复制代码
A temporary password is generated for root@localhost: H2!Yga+&rtiz

2.7.9 启动 MySQL

复制代码
bin/mysqld_safe --user=mysql &

2.7.10 登录并修改密码

复制代码
mysql -S /tmp/mysql.sock -uroot -p

输入临时密码后必须修改密码才能使用:

复制代码
alter user 'root'@'localhost' identified by 'redhat';
show databases;

2.7.11 源码卸载清理

复制代码
make clean
rm -rf /usr/local/mysql/

2.8 Windows 平台安装 MySQL

2.8.1 服务端安装

  1. 官网下载 MySQL Windows 安装包

  2. 双击运行,选择 Typical 典型安装

  3. 点击 Install 开始安装

  4. 安装完成后启动 MySQL Configurator

  5. 一路默认,设置 root 密码

  6. 执行配置,完成安装

2.8.2 命令行测试

打开 MySQL 命令行客户端:

复制代码
select version();
show databases;

2.8.3 图形客户端(MySQL Workbench)

安装:mysql-workbench-community-8.0.40-winx64

解决字符集报错

进入目录:

复制代码
C:\Program Files\MySQL\MySQL Workbench 8.0\workbench

编辑 os_utils.py找到第 356 行 ,将 utf-8 改为 gbk,保存。

2.8.4 Windows 环境变量配置

  1. 此电脑 → 属性 → 高级系统设置 → 环境变量

  2. 系统变量 → Path → 编辑

  3. 新建路径:

    C:\Program Files\MySQL\MySQL Server 8.4\bin

  4. 确定保存,重启 cmd 即可使用 mysql 命令。

2.8.5 Windows 卸载清理

  1. 控制面板 → 卸载 MySQL

  2. 删除以下目录:

    C:\Program Files\MySQL
    C:\ProgramData\MySQL
    C:\Users\用户\AppData\Roaming\MySQL

  3. 删除注册表项:

复制代码
HKEY_CURRENT_USER\Software\MySQL
HKEY_CURRENT_USER\Software\MySQL AB
HKEY_CURRENT_USER\Software\Oracle\MySQL Workbench
HKEY_LOCAL_MACHINE\SOFTWARE\MySQL AB

3、SQL 语句基础

3.1 SQL 简介

SQL(Structured Query Language) :结构化查询语言,是基于关系模型的数据库标准操作语言。

SQL 发展历史

  • 起源于 20 世纪 70 年代 ,由 IBM 研究员 E.F. Codd 提出关系模型

  • 最初作为 IBM 关系数据库原型 System R 的关系语言,实现数据检索

  • 1986 年 :ANSI(美国国家标准学会)发布第一个 SQL 标准 SQL-86

  • 后续被 ISO(国际标准化组织)采纳为国际标准

  • 标准持续演进:SQL-89 → SQL-92 → SQL:2016 → 最新标准

  • 从基础数据操作逐步扩展到复杂事务、面向对象、分布式等高级功能

SQL 核心作用

  • 定义数据库结构

  • 增删改查数据

  • 管理用户权限

  • 控制数据库安全与事务

3.2 SQL 语句分类

SQL 语言功能强大,仅用 9 个核心动词即可完成数据库几乎所有操作。

分类 英文全称 功能说明 核心动词
DDL 数据定义语言 定义 / 删除 / 修改数据库、表、索引等对象 CREATE、DROP、ALTER
DML 数据操纵语言 对表数据进行增、删、改 INSERT、DELETE、UPDATE
DQL 数据查询语言 从表中查询 / 检索数据 SELECT
DCL 数据控制语言 管理用户权限、访问控制 GRANT、REVOKE

动词说明

  • CREATE:创建库、表、视图等

  • DROP:删除库、表等

  • ALTER:修改表结构

  • INSERT:插入数据

  • DELETE:删除数据

  • UPDATE:更新数据

  • SELECT:查询数据(最常用)

  • GRANT:授予权限

  • REVOKE:收回权限

3.3 SQL 语言的特点

SQL 是一门简洁、高效、通用的数据库语言,具备五大特点:

  1. 综合统一一套语法完成数据库全生命周期操作:定义 → 操纵 → 查询 → 权限控制。

  2. 高度非过程化 只需告诉数据库 "做什么" ,无需关心 "怎么做",由数据库自动优化执行。

  3. 面向集合数据集合为单位操作,一次性处理多行数据,结果也是集合。

  4. 两种使用方式

    • 直接交互式使用(独立语言)

    • 嵌入 Java/Python/PHP 等语言中使用(嵌入式)

  5. 语言简洁、易学易用语法接近自然英语,无编程经验也可快速上手。

3.4 SQL 语句书写规范

为保证代码可读性、规范性、可维护性,必须遵守以下规则:

基本规范

  • SQL 关键字建议大写:SELECT、FROM、WHERE、INSERT 等

  • 库名、表名、字段名建议小写

  • 必须使用 英文半角符号(逗号、括号、分号等)

  • 适当使用空格、缩进,提高可读性

  • 必须添加注释,方便理解

3.5 MySQL 注释语法(三种)

MySQL 支持三种注释方式,必须掌握

1)# 单行注释

复制代码
# 这是单行注释
SELECT * FROM user;

2)-- 单行注释(注意后面必须加空格)

复制代码
-- 这是另一种单行注释
SELECT * FROM product;

3)/* */ 多行注释

复制代码
/*
这是多行注释
可以写多行内容
*/
SELECT * FROM orders;

3.6 权限语句示例(DCL)

复制代码
-- 给 user1 用户授予 Teach 库下 Student 表的查询权限
GRANT SELECT ON Teach.Student TO user1;

-- 收回 user1 用户的查询权限
REVOKE SELECT ON Teach.Student FROM user1;
相关推荐
mameng19982 小时前
Redis遇到热点key如何解决
数据库·redis·缓存
炜宏资料库2 小时前
产业集团总部大楼智能化系统项目规划方案精讲
运维·服务器·数据库
嵌入式×边缘AI:打怪升级日志2 小时前
从零开始写Linux字符设备驱动:一个不操作硬件的Hello驱动
linux·运维·数据库
搜佛说2 小时前
比SQLite更快,比InfluxDB更轻:sfsDb的降维打击
jvm·数据库·物联网·架构·sqlite·边缘计算·iot
LilySesy2 小时前
【与AI+】英语day4——数据库与性能优化
数据库·oracle·性能优化·sap·abap·自动翻译
前进的李工2 小时前
MySQL角色管理:权限控制全攻略
前端·javascript·数据库·mysql
爱丽_2 小时前
MySQL `EXPLAIN`:看懂执行计划、判断索引是否生效与排错套路
android·数据库·mysql
小红的布丁2 小时前
Redis 持久化详解:AOF、RDB 与混合持久化如何平衡性能和可靠性
数据库·redis·缓存