当前位置: 首页 > news >正文

MySQL知识点综合详解_01


一、数据库基础概念

1.1 什么是数据库?

通俗理解:数据库是一个超级智能的电子文件柜,按照特定规则存储和管理数据,便于长期保存和快速查找。

想象一下你有一个通讯录,里面记录了1000个朋友的姓名、电话、地址。如果用一个普通的Word文档记录,每次找一个人可能要翻半天;但用数据库,只需输入一句查询,一秒钟就能找到。

技术定义:数据库是按照数据结构来组织、存储和管理数据的仓库,建立在文件系统之上。数据库不仅保存数据本身,还保存数据之间的关系。

**举个生活化的例子:

  • 一家电商网站的所有商品信息、订单信息、用户信息都存储在数据库中

  • 你在淘宝搜索"手机"时,数据库瞬间从数百万商品中筛选出相关结果

  • 你下单后,数据库同时更新库存、生成订单记录、扣减余额——这一系列操作由数据库统一管理

1.2 数据库解决的核心问题

问题场景传统方式(文件/Excel)数据库方式
多人同时修改容易冲突、数据错乱并发控制,保证数据一致性
数据安全文件丢失就没了备份机制、权限控制
数据量很大打开慢、行数有限高效索引,支持海量数据
复杂查询手动筛选、计算SQL语句一键完成

详细举例说明

场景1:多人同时修改(并发控制)

假设一家公司有一个Excel文件记录员工工资表,放在共享文件夹中。

  • 传统方式:A和B同时打开文件,A修改了张三的工资从8000→9000,B修改了李四的工资从7000→7500。A先保存,B后保存,结果A的修改被B的旧版本覆盖了。

  • 数据库方式:A和B可以同时操作数据库,数据库通过行级锁定机制保证两人的修改都能正确保存,互不冲突。

-- A执行 UPDATE employees SET salary = 9000 WHERE name = '张三'; -- B执行 UPDATE employees SET salary = 7500 WHERE name = '李四'; -- 两条语句独立执行,互不影响

场景2:数据安全

  • 传统方式:硬盘坏了或误删文件,数据就没了。

  • 数据库方式:可以定期备份(Backup),即使服务器出问题,可以从备份恢复(Restore)。

# 数据库备份命令示例 mysqldump -uroot -p my_db > backup_20260605.sql ​ # 数据库恢复命令示例 mysql -uroot -p my_db < backup_20260605.sql

场景3:数据量很大

  • 传统方式:Excel超过100万行数据打开极慢,甚至无法打开。

  • 数据库方式:MySQL可以轻松处理上千万甚至上亿条记录,通过索引快速定位。

-- 从1000万条记录中查找,有索引的查询只需毫秒级响应 SELECT * FROM orders WHERE order_id = '2026060500123;

场景4:复杂查询

  • 传统方式:需要手动筛选、排序、计算,耗时耗力。

  • 数据库方式:一条SQL语句完成复杂的筛选、分组、聚合、排序。

-- 查询2026年5月,每个部门工资总额,按总额降序 SELECT department, SUM(salary) AS total_salary FROM employees WHERE hire_date >= '2026-05-01' GROUP BY department ORDER BY total_salary DESC;

1.3 数据库的四大核心操作(CRUD)

CRUD是数据库的四种基本操作,几乎所有业务系统都围绕这四个操作构建。

**假设我们有一张学生表students

idnameagegender
1张三20
2李四21
Create(创建):新增一条数据
-- 新增一个学生 INSERT INTO students (id, name, age, gender) VALUES (3, '王五', 19, '女');

操作后表中多了一行:

idnameagegender
1张三20
2李四21
3王五19
Read(读取):查询已有数据
-- 查看所有学生 SELECT * FROM students; ​ -- 只看年龄大于20的学生 SELECT * FROM students WHERE age > 20;

查询结果:

idnameagegender
2李四21
Update(更新):修改已有数据
-- 将张三的年龄改为21岁 UPDATE students SET age = 21 WHERE id = 1;

操作后:

idnameagegender
1张三21
2李四21
3王五19
Delete(删除):移除不需要的数据
-- 删除王五的记录 DELETE FROM students WHERE id = 3;

操作后:

idnameagegender
1张三21
2李四21

**生活化的CRUD场景举例(电商下单流程):

-- 1. Create:用户注册 → 新增订单 INSERT INTO orders (order_id, user_id, product_id, amount) VALUES ('20260605001', 1001, 5001, 299.00); ​ -- 2. Read:用户查看订单列表 SELECT * FROM orders WHERE user_id = 1001; ​ -- 3. Update:用户修改收货地址 UPDATE orders SET address = '北京市朝阳区XX路' WHERE order_id = '20260605001'; ​ -- 4. Delete:用户取消订单(通常是逻辑删除,实际不常用软删除 -- UPDATE orders SET status = 'cancelled' WHERE order_id = '20260605001';

1.4 数据库分类

关系型数据库(SQL)
  • 数据以二维表格形式存储(类似Excel)

  • 表与表之间可建立关联关系

  • 必须遵守ACID特性,保证数据一致性

  • 常见产品:MySQL、Oracle、SQL Server、SQLite

关系型数据库的表格示例

students学生表:

idnameclass_id
1张三1
2李四2

classes班级表:

idnameteacher
1高三(1)班王老师
2高三(2)班李老师

两张表通过class_id关联,可以通过JOIN查询:

SELECT s.name AS student_name, c.name AS class_name FROM students s JOIN classes c ON s.class_id = c.id;

查询结果:

student_nameclass_name
张三高三(1)班
李四高三(2)班
非关系型数据库(NoSQL)
  • 不强制使用表格结构,数据模型更灵活

  • 常见形态:Key-Value、文档型、列式等

  • 常见产品:Redis(缓存)、MongoDB(文档)、HBase(列式)

Key-Value数据库(Redis)示例

SET user:1001:name "张三" SET user:1001:age 20 GET user:1001:name → "张三"

文档型数据库(MongoDB)示例

// 一条文档记录,结构灵活,可嵌套 { "_id": "abc123", "name": "张三", "age": 20, "contacts": [ { "type": "phone", "value": "13800138000" }, { "type": "email", "value": "zhangsan@example.com" } ] }

关系型 vs 非关系型对比

维度关系型数据库非关系型数据库
数据结构固定表格,行列严格灵活多变,结构自由
查询语言SQL(结构化查询)各自的查询语言
事务支持完善,ACID部分支持,较弱
扩展性垂直扩展(升级硬件)水平扩展(加机器)
适用场景业务系统、金融、银行缓存、日志、社交、大数据

1.5 DB、DBMS、SQL的关系

术语全称说明
DBDatabase数据库,存储数据的仓库
DBMSDatabase Management System数据库管理系统,操作数据库的软件
SQLStructured Query Language结构化查询语言,与数据库通信的语言

三者关系示意图

用户(你) ↓ 用SQL语言说话 SQL 语句:"SELECT * FROM students;" ↓ DBMS(MySQL软件) ← 翻译SQL ↓ 操作 DB(实际存储的数据文件) ↓ 返回 查询结果表格

生活化类比

  • DB就像图书馆,存放所有书籍(数据)

  • DBMS就像图书管理员,负责帮你找书、整理书籍

  • SQL就像你跟管理员说的话:"请帮我找计算机类的所有图书"

具体到MySQL中三者的体现

你在命令行输入: mysql> SELECT name, age FROM students WHERE age > 20; ​ ↓ DBMS(MySQL Server)解析SQL,找到数据文件 ​ ↓ 结果: +------+-----+ | name | age | +------+-----+ | 李四 | 21 | +------+-----+

二、MySQL数据库介绍

2.1 MySQL的特点

开源免费:社区版完全免费,适合个人学习和中小企业 ✅功能强大:支持上千万条记录的大型数据库 ✅标准SQL:使用通用SQL语言,易于学习和迁移 ✅跨平台:支持Windows、Linux、Mac等操作系统 ✅多语言支持:Python、Java、C++等都有客户端驱动

特点详细说明与举例

开源免费MySQL Community Server 是完全开源免费的,任何人都可以下载使用,无需支付授权费用。这使得它成为个人开发者、初创公司和中小企业的首选。相比之下,Oracle 数据库的企业版授权费用可能高达数十万元。

对比: - MySQL社区版:¥0,功能完整,适合学习和小型项目 - Oracle企业版:¥100万+/年,功能超强,适合大型企业

功能强大MySQL 能够处理大型数据集,支持复杂查询、事务、存储过程、触发器、视图、开窗函数等高级特性。

-- 举例:复杂查询 SELECT department, COUNT(*) AS emp_count, AVG(salary) AS avg_salary, RANK() OVER(ORDER BY AVG(salary) DESC) AS rank_num FROM employees GROUP BY department HAVING COUNT(*) > 5 ORDER BY avg_salary DESC;

标准SQLMySQL 遵循 ANSI SQL 标准,你在 MySQL 中学到的知识可以轻松迁移到 Oracle、SQL Server 等其他关系型数据库。

-- 标准SQL语句(在任何主流关系数据库都能运行) SELECT name, age FROM students WHERE age > 20;

跨平台MySQL 可以在 Windows、Linux、MacOS 等多种操作系统上运行。你的数据库在 Windows 开发环境写的应用部署到 Linux 服务器上几乎不需要修改。

多语言支持几乎所有主流编程语言都有 MySQL 的驱动程序:

# Python 使用 pymysql 连接 MySQL import pymysql conn = pymysql.connect(host='localhost', user='root', password='123456', database='my_db') cursor = conn.cursor() cursor.execute("SELECT * FROM students") results = cursor.fetchall()
// Java 使用 JDBC 连接 MySQL Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/my_db", "root", "123456"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM students");

2.2 版本选择

  • 推荐:MySQL 8.0 社区版(MySQL Community Server)

  • 企业版:需付费,提供官方技术支持(学习用社区版足够)

MySQL 版本历史简要说明

版本发布时间主要特性
MySQL 5.62013年全文搜索、性能优化
MySQL 5.72015年JSON支持、优化器改进
MySQL 8.02018年窗口函数、CTE、更好的字符集(utf8mb4)
MySQL 8.42024年LTS版本,性能持续优化

为什么推荐 8.0?

  • 支持窗口函数(Window Functions):可以很方便地实现排名、分组计算等功能

  • 支持通用表表达式(CTE):可以编写更易读的复杂查询

  • 默认字符集 utf8mb4:完美支持 emoji 和各种生僻字

  • 性能显著提升:查询速度比 5.7 快数倍

-- MySQL 8.0 新增的窗口函数示例(5.7及之前版本不支持) SELECT name, score, RANK() OVER(ORDER BY score DESC) AS rank_num FROM students;

2.3 常用数据库产品对比

数据库厂商类型特点应用场景
MySQLOracle关系型开源免费,功能强大Web应用、企业管理系统
OracleOracle关系型大型收费,稳定可靠银行、金融系统
SQL ServerMicrosoft关系型Windows平台常用.NET开发项目
SQLiteD. Richard Hipp关系型轻量级嵌入式手机App、小型工具
RedisRedis Labs非关系型内存缓存,速度极快缓存、会话管理
MongoDBMongoDB Inc非关系型文档型,灵活大数据、日志存储

各数据库典型应用举例

MySQL— 中小电商网站的产品库

CREATE TABLE products ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(200) NOT NULL, price DECIMAL(10,2) NOT NULL, stock INT DEFAULT 0 );

Oracle— 银行核心交易系统(需要极高的稳定性和安全性)

SQL Server— .NET 企业应用,配合微软生态系统使用

SQLite— 手机App中的本地数据库(如微信的聊天记录、手机游戏存档)

Redis— 电商秒杀库存缓存

SET product:1001:stock 100 # 设置商品库存 DECR product:1001:stock # 下单时扣减库存,原子操作

MongoDB— 存储用户评论(结构灵活,可嵌套)

{ "user": "张三", "content": "这本书很好", "replies": [ {"user": "李四", "content": "我同意"}, {"user": "王五", "content": "我觉得一般"} ] }

三、MySQL安装与配置

3.1 验证安装

打开命令提示符或PowerShell:

mysql --version

成功输出示例:

mysql Ver 8.0.45 for Win64 on x86_64 (MySQL Community Server - GPL)

如果未安装,提示信息说明

# Windows提示: 'mysql' 不是内部或外部命令,也不是可运行的程序

这时你需要去 MySQL 官网下载安装包(https://dev.mysql.com/downloads/mysql/),选择适合你的操作系统的版本。

Windows安装步骤简要说明

  1. 下载 MySQL Installer for Windows

  2. 选择 "Developer Default"(开发默认)或 "Server only"(仅服务器)

  3. 按照安装向导完成安装

  4. 设置 root 密码(务必记住)

  5. 配置端口(默认3306)

  6. 选择 "Configure MySQL Server as a Windows Service"

3.2 配置环境变量

目的:让系统能直接找到mysql命令

如果不配置环境变量,每次使用 mysql 命令需要写完整路径:

"C:\Program Files\MySQL\MySQL Server 8.0\bin\mysql.exe" -uroot -p

配置环境变量后可以直接:

mysql -uroot -p

详细步骤(Windows)

  1. 找到MySQL的bin目录,默认路径:C:\Program Files\MySQL\MySQL Server 8.0\bin

  2. 右键点击「此电脑」→「属性」→「高级系统设置」→「环境变量」

  3. 在「系统变量」中找到Path,点击「编辑」

  4. 点击「新建」,将MySQL的bin目录路径粘贴进去

  5. 一路点击「确定」保存

  6. 关闭旧终端,重新打开新终端,输入mysql --version验证

常见问题排查

问题原因解决方法
提示找不到mysql命令环境变量未正确配置检查路径是否正确,重启终端
Access denied for user 'root'@'localhost'密码错误使用正确的密码登录
Can't connect to MySQL serverMySQL服务未启动在服务中启动MySQL服务

3.3 登录MySQL

# 方式1:交互式输入密码(推荐,安全) mysql -uroot -p ​ # 方式2:指定主机地址(远程连接) mysql -uroot -p -h 127.0.0.1 ​ # 方式3:完整参数写法 mysql --user=root --password --host=127.0.0.1

成功登录后显示

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.45 MySQL Community Server - GPL ​ Copyright (c) 2000, 2024, 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>

看到mysql>提示符表示已成功连接。

退出MySQL命令

exit; -- 或 quit; -- 或 \q

参数说明

  • -u:用户名(user),如rootadmin

  • -p:密码(password),不直接跟密码更安全。如果硬写密码如-p123456,密码会保存在历史记录中,有风险

  • -h:主机地址(host),127.0.0.1localhost表示本机,远程连接写服务器IP

  • -P:端口号(Port),默认3306,大写P

完整参数示例

# 连接远程数据库 mysql -u admin -p -h 192.168.1.100 -P 3306 ​ # 连接后直接进入某个数据库 mysql -uroot -p my_db

登录后的常用初始命令

-- 查看当前用户 SELECT USER(); ​ -- 查看当前数据库 SELECT DATABASE(); ​ -- 查看所有数据库 SHOW DATABASES; ​ -- 查看MySQL版本 SELECT VERSION();

四、SQL语句基础

4.1 SQL语句分类

分类简称作用关键字
数据定义语言DDL创建/修改/删除数据库对象CREATE, ALTER, DROP
数据操作语言DML增删改表中数据INSERT, UPDATE, DELETE
数据查询语言DQL查询表中数据SELECT
数据控制语言DCL管理用户权限和事务GRANT, REVOKE, COMMIT, ROLLBACK

各类语句详细举例说明

DDL(Data Definition Language)—— 定义数据结构DDL操作的对象是「数据库对象」(表、索引、视图等),不是数据本身。DDL语句执行后立即生效,不可回滚。

-- 创建表 CREATE TABLE employees ( id INT PRIMARY KEY, name VARCHAR(50) ); ​ -- 修改表结构 ALTER TABLE employees ADD COLUMN salary DECIMAL(10,2); ​ -- 删除表 DROP TABLE employees;

类比:DDL就像盖房子,先画图纸(设计表结构),盖房子(创建表),装修(修改表结构),拆房(删除表)。

DML(Data Manipulation Language)—— 操作数据DML操作的对象是表中的数据行。可以通过事务控制回滚。

-- 插入数据 INSERT INTO employees (id, name, salary) VALUES (1, '张三', 8000); ​ -- 更新数据 UPDATE employees SET salary = 9000 WHERE id = 1; ​ -- 删除数据 DELETE FROM employees WHERE id = 1;

类比:DML就像日常往房子里搬家具(INSERT)、挪家具(UPDATE)、扔家具(DELETE)。

DQL(Data Query Language)—— 查询数据DQL只有一个核心关键字:SELECT。用来从数据库中读取数据,不修改数据。

-- 最简单的查询 SELECT * FROM employees; ​ -- 带条件的查询 SELECT name, salary FROM employees WHERE salary > 8000; ​ -- 排序分组查询 SELECT name, salary FROM employees WHERE salary > 8000 ORDER BY salary DESC LIMIT 10;

DCL(Data Control Language)—— 控制权限和事务管理谁能访问什么数据,以及事务的提交和回滚。

-- 创建用户 CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'password123'; ​ -- 授予权限 GRANT SELECT, INSERT ON my_db.* TO 'app_user'@'localhost'; ​ -- 回收权限 REVOKE INSERT ON my_db.* FROM 'app_user'@'localhost'; ​ -- 事务控制 START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;

四类语句记忆口诀

  • DDL:定义对象 —— CREATE, ALTER, DROP

  • DML:操作数据 —— INSERT, UPDATE, DELETE

  • DQL:查询数据 —— SELECT

  • DCL:控制权限 —— GRANT, REVOKE, COMMIT, ROLLBACK

4.2 SQL语法规范

  1. 分号结尾:每条SQL语句以;结束

  2. 关键字大写:建议关键字大写(如SELECT、FROM)

  3. 空格缩进:可换行和缩进增强可读性

  4. 注释方式

    -- 单行注释 /* 多行注释 */ # MySQL特有单行注释

规范详细说明与举例

1. 分号结尾在MySQL中,分号是语句结束的标志。不写分号MySQL会认为语句还没写完,继续等待输入。

-- 正确写法 SELECT * FROM students; ​ -- 不写分号的后果(MySQL会等待你继续输入) mysql> SELECT * FROM students -> ​ -- 此时需要补一个分号或者按Ctrl+C取消

在MySQL客户端中,可以使用DELIMITER临时改变结束符(常用于存储过程):

DELIMITER // CREATE PROCEDURE GetStudents() BEGIN SELECT * FROM students; END // DELIMITER ;

2. 关键字大写虽然SQL不区分大小写,但约定俗成关键字大写,表名列名小写,使代码更易读。

-- 推荐写法(关键字大写) SELECT id, name, age FROM students WHERE age > 20 ORDER BY age DESC; ​ -- 不推荐写法(全小写,可读性差) select id, name, age from students where age > 20 order by age desc; ​ -- 也不推荐(关键字和表名列名混写) SELECT ID, NAME, AGE FROM STUDENTS WHERE AGE > 20;

3. 空格与缩进复杂查询建议换行和缩进,清晰表达层级关系。

-- 推荐写法(缩进对齐) SELECT s.name, c.name AS class_name, AVG(sc.score) AS avg_score FROM students s INNER JOIN classes c ON s.class_id = c.id LEFT JOIN scores sc ON sc.student_id = s.id WHERE s.age >= 18 AND c.name LIKE '高三%' GROUP BY s.name, c.name HAVING avg_score >= 80 ORDER BY avg_score DESC LIMIT 10; ​ -- 不推荐写法(一行到底) SELECT s.name, c.name AS class_name, AVG(sc.score) AS avg_score FROM students s INNER JOIN classes c ON s.class_id = c.id LEFT JOIN scores sc ON sc.student_id = s.id WHERE s.age >= 18 AND c.name LIKE '高三%' GROUP BY s.name, c.name HAVING avg_score >= 80 ORDER BY avg_score DESC LIMIT 10;

4. 注释方式注释不会被执行,用于解释代码逻辑。

-- 这是单行注释,从--开始到行尾 SELECT name FROM students; -- 也可以写在语句后面 ​ /* 这是多行注释 可以写多行内容 常用于注释掉一大段代码 */ SELECT id, name FROM students; ​ # MySQL特有的单行注释(不推荐跨数据库使用) SELECT * FROM students;

注释的实际应用场景

-- 2026-06-05,统计各班级人数,用于月报 SELECT class_id, COUNT(*) FROM students GROUP BY class_id; ​ /* 以下语句用于数据修复 UPDATE students SET status = 'active' WHERE created_at < '2026-01-01'; 暂时注释掉,等确认后再执行 */

MySQL中的一些特殊规则

  • 数据库名、表名、列名可以用反引号`包裹,避免与关键字冲突

  • 字符串用单引号'或双引号"包裹,推荐使用单引号

http://www.gsyq.cn/news/1476734.html

相关文章:

  • 低资源语言语义关系构建:土耳其语语料库混合方法
  • MySQL 执行引擎深度解密:基于 AST 解析器定制与 Optimizer 执行计划干预的 SQL 性能调优实战
  • 3步上手Windows自动化神器:Pulover‘s Macro Creator新手完全指南
  • **L_mask**(掩码损失)是什么
  • Git小白避坑实录:手把手教你解决‘ahead by N commits’并理解origin/master到底是个啥
  • 服务器迁移后,NetBackup 8.1.2客户端报socket(25)错误?手把手教你排查1556端口监听问题
  • MonkeyCode 技术架构全解析:一个开源AI编程平台的设计哲学
  • Kimi k2.6 LeetCode 3041. 修改数组后最大化数组中的连续元素数目 JavaScript实现
  • 遗产继承纠纷律师价格大揭秘 - myqiye
  • AI 搜索工具别只看答案完整度,来源层级、时间戳和复核记录更关键
  • 微信小程序自定义导航栏终极指南:三步打造完美适配的导航体验
  • Windows 10/11 系统下,手把手教你搞定 SRA Toolkit 最新版安装与环境配置(含常见报错解决)
  • 2026年酒回收品牌企业排名 - mypinpai
  • 2026年温州焊接闸阀优质厂家怎么选 - 新闻快传
  • 深度解析:LinkSwift - 九大网盘直链下载助手的架构设计与技术实现
  • C语言指针基础
  • AI 辅助编程进入项目流程前,测试记录、依赖边界和回退方案要先写清
  • 【MATLAB】无人机自适应姿态抗扰控制算法仿真研究
  • 线上服务器日常运维工作流程(企业真实运维手册)
  • 备战英语四级计划,豆包和千问的计划能相差多少 GXUST AI通识课
  • 【数据库系统原理】第2篇:数据模型抽象:从现实世界到机器世界的三层映射
  • 2026年更新指南:兰州合同纠纷律师怎么选择?聚焦性价比与专业度分析 - 2026年企业资讯
  • 新手必看:下载claudecode后,用快马平台十分钟创建首个网页
  • 2026年当下,如何为宝宝挑选诺优能奶粉厂家直供的可靠渠道? - 2026年企业资讯
  • 如何高效实现网盘免客户端下载:开源直链助手完全指南
  • 传统行业高管适合读EMBA吗?适配价值与优质项目全解析
  • 2026年 斜楼扶正厂家推荐:危房纠偏/地基加固/房屋平移专业公司深度解析 - 品牌企业推荐师(官方)
  • 2026年 彩钢瓦厂家推荐:屋顶、隔热、防腐、全新升级镀铝锌彩钢瓦公司深度盘点 - 品牌企业推荐师(官方)
  • 2026年氟碳铝单板厂家推荐:氟碳铝单板幕墙/造型天花/车间厂房铝单板品牌实力与经典案例深度解析 - 品牌企业推荐师(官方)
  • 2026年新消息:洞察行业知名的精益线企业,把握柔性制造新机遇 - 2026年企业资讯