【MySQL篇】从零开始:安装与基础概念

文章目录

    • [MySQL 从零开始:安装与基础概念](#MySQL 从零开始:安装与基础概念)
    • 一、前言:为什么需要数据库
    • 二、文件存储的缺陷
      • [2.1 文件存储的四大问题](#2.1 文件存储的四大问题)
        • [1. 安全性问题](#1. 安全性问题)
        • [2. 查询与管理不便](#2. 查询与管理不便)
        • [3. 海量数据存储](#3. 海量数据存储)
        • [4. 程序控制困难](#4. 程序控制困难)
    • 三、什么是数据库
      • [3.1 数据库的三个关键特性](#3.1 数据库的三个关键特性)
      • [3.2 数据库的存储介质](#3.2 数据库的存储介质)
    • 四、主流数据库对比
      • [4.1 主要数据库产品](#4.1 主要数据库产品)
      • [4.2 为什么选择 MySQL](#4.2 为什么选择 MySQL)
    • [五、Ubuntu 22.04 安装 MySQL](#五、Ubuntu 22.04 安装 MySQL)
      • [5.1 检查系统环境](#5.1 检查系统环境)
      • [5.2 更新包管理器](#5.2 更新包管理器)
      • [5.3 检查是否有旧版本 MySQL](#5.3 检查是否有旧版本 MySQL)
      • [5.4 安装 MySQL Server](#5.4 安装 MySQL Server)
      • [5.5 验证安装](#5.5 验证安装)
      • [5.6 启动 MySQL 服务](#5.6 启动 MySQL 服务)
      • [5.7 设置开机自启](#5.7 设置开机自启)
    • [六、首次登录 MySQL](#六、首次登录 MySQL)
      • [6.1 第一次连接](#6.1 第一次连接)
      • [6.2 检查当前用户](#6.2 检查当前用户)
      • [6.3 设置 root 密码(可选)](#6.3 设置 root 密码(可选))
      • [6.4 退出 MySQL](#6.4 退出 MySQL)
    • [七、MySQL 连接命令详解](#七、MySQL 连接命令详解)
      • [7.1 完整连接语法](#7.1 完整连接语法)
      • [7.2 常见连接示例](#7.2 常见连接示例)
    • 八、数据库、表与服务器的关系
      • [8.1 三层架构](#8.1 三层架构)
      • [8.2 快速上手示例](#8.2 快速上手示例)
    • [九、MySQL 架构简述](#九、MySQL 架构简述)
      • [9.1 逻辑架构](#9.1 逻辑架构)
      • [9.2 跨平台兼容性](#9.2 跨平台兼容性)
    • [十、SQL 语言分类](#十、SQL 语言分类)
      • [10.1 SQL 的四大分类](#10.1 SQL 的四大分类)
        • [1. DDL(数据定义语言)](#1. DDL(数据定义语言))
        • [2. DML(数据操纵语言)](#2. DML(数据操纵语言))
        • [3. DQL(数据查询语言)](#3. DQL(数据查询语言))
        • [4. DCL(数据控制语言)](#4. DCL(数据控制语言))
      • [10.2 SQL 分类在实际开发中的应用](#10.2 SQL 分类在实际开发中的应用)
    • 十一、存储引擎
      • [11.1 什么是存储引擎](#11.1 什么是存储引擎)
      • [11.2 查看可用的存储引擎](#11.2 查看可用的存储引擎)
      • [11.3 主流存储引擎对比](#11.3 主流存储引擎对比)
      • [11.4 InnoDB vs MyISAM 详细对比](#11.4 InnoDB vs MyISAM 详细对比)
      • [11.5 查看表使用的存储引擎](#11.5 查看表使用的存储引擎)
      • [11.6 修改存储引擎](#11.6 修改存储引擎)
    • [十二、MySQL 配置文件详解](#十二、MySQL 配置文件详解)
      • [12.1 配置文件位置](#12.1 配置文件位置)
      • [12.2 查看当前配置](#12.2 查看当前配置)
      • [12.3 常见配置项](#12.3 常见配置项)
      • [12.4 修改配置文件](#12.4 修改配置文件)
    • 十三、总结与下一步

MySQL 从零开始:安装与基础概念

一、前言:为什么需要数据库

💬 核心问题:程序如何存储和管理数据?

🚀 思考

  • 用文件存储数据不就行了吗?为什么还要数据库?
  • 数据库和数据库管理系统有什么区别?
  • MySQL 在众多数据库中有什么特点?

二、文件存储的缺陷

在深入数据库之前,先理解为什么需要它。用文件保存数据看似简单,但存在几个根本性问题。

2.1 文件存储的四大问题

1. 安全性问题

文件存储在操作系统中,没有访问控制机制。任何有文件访问权限的程序或用户都能随意读取、修改甚至删除数据。如果多个程序同时访问同一个文件,无法保证数据的一致性。举例来说,两个程序同时修改一个文件中的账户余额,可能导致数据混乱。

2. 查询与管理不便

用文件存储数据时,要查找特定内容需要遍历整个文件。如果要统计、排序或关联多个文件的数据,工作量极大。比如从 100 万条用户记录中找出某个城市的用户,用文件处理会非常低效。

3. 海量数据存储

文件的组织方式不适合存储大规模数据。当数据量超过内存大小时,程序的运行效率会急剧下降。文件系统也没有为大数据存储进行优化。

4. 程序控制困难

用文件存储数据时,程序需要自己处理数据的读写、校验、备份等所有逻辑。这大大增加了开发难度和维护成本。如果要实现事务控制(确保一组操作要么全部成功,要么全部失败),文件方式无法支持。


三、什么是数据库

为了解决文件存储的这些问题,专家们设计了数据库。数据库是一个有组织、可控制的数据集合,它提供了统一的接口来安全地存储、检索和管理数据。

3.1 数据库的三个关键特性

特性 说明
安全性 通过用户权限控制,只有授权用户才能访问数据
高效查询 支持 SQL 语言,快速查询和统计数据
海量存储 能存储 TB 级甚至更大规模的数据,并保持高效访问

3.2 数据库的存储介质

数据库的数据最终还是存储在物理介质上,主要有两种:

  • 磁盘存储:大容量、低成本、持久化,但速度相对较慢。
  • 内存存储:速度快,但容量有限,断电数据丢失。

实际应用中,数据库通常采用磁盘 + 内存的混合方式:热数据存在内存中以提高访问速度,冷数据存在磁盘上以节省成本。


四、主流数据库对比

4.1 主要数据库产品

数据库 厂商 应用场景 特点
MySQL 甲骨文 中小型项目、电商、论坛 开源、高并发、易上手,不适合复杂业务逻辑
Oracle 甲骨文 大型项目 功能强大、稳定性高、学习成本大、价格昂贵
SQL Server 微软 企业应用、.NET 项目 Windows 系统优化、与微软技术栈兼容
PostgreSQL 开源社区 学术研究、高可靠应用 功能完整、完全免费、并发性能好
SQLite 开源 嵌入式应用、手机 App 轻量级、无需服务器、占用资源少

4.2 为什么选择 MySQL

在这个教程中,我们学习 MySQL 的原因是:

  1. 世界最流行:全球超过 50% 的网站使用 MySQL,包括 Facebook、Twitter、YouTube 等。
  2. 入门友好:相比 Oracle 的复杂性,MySQL 学习曲线平缓,适合初学者。
  3. 高并发性能:特别适合 Web 应用,能处理大量并发请求。
  4. 校招必考:几乎所有 Java、后端开发的笔试面试都会考 MySQL 基础。
  5. 开源免费:无需付费,源代码公开,社区活跃。

五、Ubuntu 22.04 安装 MySQL

5.1 检查系统环境

首先确认你的 Ubuntu 版本:

bash 复制代码
cat /etc/os-release

输出应该包含 Ubuntu 22.04 LTS

5.2 更新包管理器

在安装任何软件前,先更新系统包列表:

bash 复制代码
sudo apt update

5.3 检查是否有旧版本 MySQL

如果之前安装过 MySQL 或 MariaDB,需要先清理:

bash 复制代码
# 检查是否有 MySQL 进程运行
ps aux | grep mysql

# 如果有,停止服务
sudo systemctl stop mysql

# 卸载旧版本
sudo apt remove mysql-server mysql-client mysql-common -y

5.4 安装 MySQL Server

在 Ubuntu 22.04 上,直接使用官方仓库安装 MySQL 8.0:

bash 复制代码
sudo apt install mysql-server -y

等待安装完成。Ubuntu 官方仓库中的 MySQL 已经是最新的 8.0 版本,比 CentOS 中的 5.7 更稳定。

5.5 验证安装

检查 MySQL 是否正确安装:

bash 复制代码
mysql --version

输出示例:

bash 复制代码
mysql  Ver 8.0.45-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

5.6 启动 MySQL 服务

bash 复制代码
sudo systemctl start mysql

检查服务状态:

bash 复制代码
sudo systemctl status mysql

输出应该显示 active (running)

5.7 设置开机自启

这样每次重启系统时 MySQL 会自动启动:

bash 复制代码
sudo systemctl enable mysql

六、首次登录 MySQL

6.1 第一次连接

在 Ubuntu 22.04 中,MySQL 8.0 的 root 用户初始状态是没有密码的。直接登录:

bash 复制代码
sudo mysql -u root

如果输出以下类似内容,说明登录成功:

bash 复制代码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.45-0ubuntu0.22.04.1 (Ubuntu)

Copyright (c) 2000, 2026, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

6.2 检查当前用户

在 MySQL 命令行中,输入:

sql 复制代码
SELECT user, host FROM mysql.user;

这会显示数据库中所有的用户及其可以连接的主机。

6.3 设置 root 密码(可选)

虽然初期学习不需要密码,但为了安全起见,建议设置一个:

sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

your_password 替换为你的密码。

6.4 退出 MySQL

输入 exitquit 退出 MySQL 命令行:

sql 复制代码
exit;

七、MySQL 连接命令详解

7.1 完整连接语法

bash 复制代码
mysql -h <host> -P <port> -u <username> -p

各参数说明:

参数 说明 默认值
-h 服务器地址 127.0.0.1(本地)
-P 服务器端口 3306
-u 用户名 root
-p 密码(后面接密码或交互输入)

7.2 常见连接示例

本地连接(使用默认值)

bash 复制代码
mysql -u root -p

输入密码后按回车。

指定主机和端口

bash 复制代码
mysql -h 10.2.0.12 -P 3306 -u root -p

不提示输入密码(直接写在命令中,不推荐用于生产环境)

bash 复制代码
mysql -u root -pYourPassword

注意:-p 后面直接跟密码,中间没有空格。


八、数据库、表与服务器的关系

8.1 三层架构

MySQL 采用三层架构来组织数据:

bash 复制代码
[MySQL Server 数据库服务器]
        ↓
  [多个 Database(数据库)]
        ↓
   [每个数据库包含多个 Table(表)]
        ↓
    [每个表包含多行数据]

数据库服务器:安装在机器上的 MySQL 程序,负责管理所有数据库。一个服务器可以管理多个数据库。

数据库 :一个逻辑容器,用来组织相关的表。通常为每个应用创建一个数据库。比如,一个电商系统可能有 shop_db 数据库。

:数据库中的基本存储单位,以行和列的形式存储数据。类似于 Excel 表格。

8.2 快速上手示例

现在通过一个简单的例子,体验数据库的基本操作。登录 MySQL 后,输入以下命令:

创建数据库

sql 复制代码
CREATE DATABASE helloworld;

切换到这个数据库

sql 复制代码
USE helloworld;

创建表

sql 复制代码
CREATE TABLE student (
    id INT,
    name VARCHAR(32),
    gender VARCHAR(2)
);

插入数据

sql 复制代码
INSERT INTO student (id, name, gender) VALUES (1, '张三', '男');
INSERT INTO student (id, name, gender) VALUES (2, '李四', '女');
INSERT INTO student (id, name, gender) VALUES (3, '王五', '男');

查询数据

sql 复制代码
SELECT * FROM student;

输出结果:

bash 复制代码
+------+------+--------+
| id   | name | gender |
+------+------+--------+
|    1 | 张三 | 男     |
|    2 | 李四 | 女     |
|    3 | 王五 | 男     |
+------+------+--------+

九、MySQL 架构简述

9.1 逻辑架构

MySQL 采用 C/S(客户端-服务器) 架构。客户端(如 mysql 命令行工具)通过 TCP 连接向服务器发送 SQL 语句,服务器接收、解析、执行后返回结果。

bash 复制代码
[客户端 mysql CLI] 
        ↓ (SQL 语句)
[MySQL Server]
        ↓ (处理流程)
  1. 连接认证
  2. SQL 解析
  3. 优化执行
  4. 调用存储引擎
        ↓ (返回结果)
[客户端展示结果]

9.2 跨平台兼容性

MySQL 的代码用 C 语言编写,具有良好的可移植性,支持几乎所有操作系统:

  • Linux / Unix
  • Windows
  • macOS
  • Solaris

无论在哪个平台上运行,MySQL 的行为和命令语法都是一致的。


十、SQL 语言分类

10.1 SQL 的四大分类

SQL(Structured Query Language,结构化查询语言)是操作数据库的标准语言。根据功能不同,SQL 分为四大类:

1. DDL(数据定义语言)

Data Definition Language:用来定义和维护数据库对象的结构。

命令 功能
CREATE 创建数据库、表、索引等
ALTER 修改数据库、表的结构
DROP 删除数据库、表等对象
TRUNCATE 清空表中数据(保留表结构)

示例:

sql 复制代码
CREATE TABLE users (id INT, name VARCHAR(50));
ALTER TABLE users ADD age INT;
DROP TABLE users;
2. DML(数据操纵语言)

Data Manipulation Language:用来操作表中的数据。

命令 功能
INSERT 向表中插入新数据
UPDATE 修改表中的数据
DELETE 删除表中的数据

示例:

sql 复制代码
INSERT INTO users (id, name) VALUES (1, 'Alice');
UPDATE users SET name = 'Bob' WHERE id = 1;
DELETE FROM users WHERE id = 1;
3. DQL(数据查询语言)

Data Query Language:用来查询数据。虽然严格来说 DQL 是 DML 的一部分,但因为查询操作最常用,通常单独列出。

命令 功能
SELECT 查询表中的数据

示例:

sql 复制代码
SELECT * FROM users;
SELECT name FROM users WHERE id = 1;
4. DCL(数据控制语言)

Data Control Language:用来控制用户权限和事务。

命令 功能
GRANT 授予用户权限
REVOKE 撤销用户权限
COMMIT 提交事务
ROLLBACK 回滚事务

示例:

sql 复制代码
GRANT SELECT ON database.* TO 'user'@'localhost';
REVOKE SELECT ON database.* FROM 'user'@'localhost';
COMMIT;
ROLLBACK;

10.2 SQL 分类在实际开发中的应用

  • 系统管理员:主要使用 DDL 和 DCL,创建数据库、管理用户权限。
  • 应用开发者:主要使用 DML 和 DQL,增删改查数据。
  • 数据库优化人员:需要理解所有四类,进行性能调优。

十一、存储引擎

11.1 什么是存储引擎

存储引擎 是 MySQL 的核心组件,负责具体实现数据的存储方式、索引机制和查询性能。MySQL 采用插件式架构,支持多种存储引擎,用户可以根据应用场景选择合适的引擎。

11.2 查看可用的存储引擎

登录 MySQL 后,运行:

sql 复制代码
SHOW ENGINES;

输出示例(Ubuntu 22.04 MySQL 8.0):

11.3 主流存储引擎对比

特性 InnoDB MyISAM MEMORY
事务支持 ✅ 支持 ❌ 不支持 ❌ 不支持
行级锁 ✅ 是 ❌ 表级锁 ❌ 表级锁
崩溃恢复 ✅ 好 ❌ 差 ❌ 数据丢失
外键支持 ✅ 支持 ❌ 不支持 ❌ 不支持
存储位置 磁盘 磁盘 内存
查询速度 较快 快(无事务开销) 极快
使用场景 大多数应用 读多写少 临时表、缓存

11.4 InnoDB vs MyISAM 详细对比

InnoDB(推荐)

特点

  • 支持事务,确保数据的一致性和完整性。
  • 行级锁,多个用户可以同时修改不同行的数据,并发性强。
  • 自动崩溃恢复,服务器意外宕机时能恢复数据。
  • 支持外键约束,适合复杂的数据关系。

应用场景

  • 绝大多数生产环境应用。
  • 需要数据可靠性的应用。
  • 高并发场景。
MyISAM

特点

  • 不支持事务,性能比 InnoDB 略快。
  • 表级锁,一个用户写入时,其他用户必须等待。
  • 适合读多写少的场景。
  • 不支持外键。

应用场景

  • 仅查询的表(如日志表)。
  • 旧版本遗留系统。
MEMORY

特点

  • 数据存储在内存中,速度最快。
  • 数据库关闭或系统重启时数据丢失。
  • 表的大小受内存限制。

应用场景

  • 临时数据表。
  • 会话数据。
  • 高速缓存。

11.5 查看表使用的存储引擎

sql 复制代码
SHOW CREATE TABLE table_name;

或者:

sql 复制代码
SHOW TABLE STATUS LIKE 'table_name'\G

11.6 修改存储引擎

sql 复制代码
ALTER TABLE table_name ENGINE = InnoDB;

从 MySQL 5.5.5 开始,InnoDB 成为默认存储引擎,新建表会自动使用 InnoDB。


十二、MySQL 配置文件详解

12.1 配置文件位置

在 Ubuntu 22.04 中,MySQL 的主配置文件通常是:

bash 复制代码
/etc/mysql/mysql.conf.d/mysqld.cnf

你也可以查看所有配置文件:

bash 复制代码
sudo ls -la /etc/mysql/

12.2 查看当前配置

bash 复制代码
sudo cat /etc/mysql/mysql.conf.d/mysqld.cnf

12.3 常见配置项

配置项 说明 示例值
port MySQL 服务端口 3306
datadir 数据存储目录 /var/lib/mysql
socket Unix socket 文件位置 /var/run/mysqld/mysqld.sock
character_set_server 默认字符集 utf8mb4
default_storage_engine 默认存储引擎 InnoDB
max_connections 最大连接数 151

12.4 修改配置文件

如需修改配置,使用编辑器打开配置文件:

bash 复制代码
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

修改后保存,重启 MySQL 服务生效:

bash 复制代码
sudo systemctl restart mysql

十三、总结与下一步

现在你已经掌握了:

环境搭建:在 Ubuntu 22.04 上安装并启动 MySQL 8.0

基础概念:理解数据库、表、存储引擎的含义

SQL 语言:了解 DDL、DML、DQL、DCL 的区别

实际操作:能创建数据库、表,插入和查询数据

下一篇,我们将深入学习如何操作

相关推荐
Curtain_Gin2 小时前
windows vim 配置
linux·编辑器·vim
Dontla2 小时前
(龙虾)OpenClaw(原 Clawdbot / Moltbot)常见部署方式介绍(Linux部署、Windows桌面部署)
linux·运维·服务器
Ghost Face...2 小时前
Linux USB 全栈解析:OTG + Type-C + PD 内核架构(架构师级)
linux·c语言·架构
周末也要写八哥2 小时前
追求性能极致为何不用Redis?
数据库·redis·缓存
JosieBook2 小时前
【Redis】Redis如何修改密码?
数据库·redis·bootstrap
gihigo19982 小时前
基于MSComm控件的PC串口通信程序(中断方式接收数据)
数据库·mongodb
菜鸟z级2 小时前
在新电脑装ubuntu包
linux·运维·ubuntu
一个人旅程~2 小时前
旧笔记本电脑安装win10精简版LTSB&win10LTSC&linuxmint作为三系统的操作指导书(以DELL n4020为例)
linux·windows·经验分享·电脑
十五年专注C++开发2 小时前
达梦数据库在Linux备份报错 -8003: 缺少本地或者远程归档 解决方案
数据库·c++·dm·备份复原