以热爱记生活

MySQL 全面精通:从入门到深度实践

引言

MySQL 作为全球最流行的开源关系型数据库(RDBMS),以其高性能、高可靠性、易用性和开源社区的巨大活力,成为了 Web 应用、企业系统乃至大规模互联网服务的基石。本文从零开始,逐步深入到 MySQL 的内核机制,带你全面征服 MySQL。


第一部分:基础入门篇


1. 核心概念与安装配置

# Linux 启动服务
systemctl start mysqld
# 连接数据库(安装时会提示设置root密码或生成临时密码)

mysql -u root -p

# 重置密码点击下载
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Aisdf@3.14!';
# 刷新权限
FLUSH PRIVILEGES;

2. SQL 语言基础(CRUD)

#选择数据库
use 数据库名;
#创建数据库
CREATE DATABASES 数据库名;
#删除数据库
DROP DATABASES 数据库名;

SQL(Structured Query Language)是与数据库交互的语言。<br/>DDL(数据定义语言) - 定义和修改数据库结构<br/>

#创建数据表
CREATE DATABASE mydb;
USE mydb;
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

#显示当前数据库中的所有表
SHOW TABLES;
#查看表结构
DESC 表名;
#添加列
ALTER TABLE users ADD COLUMN age INT;
#修改表
ALTER TABLE users MODIFY 列名 新数据类型;
#删除列
ALTER TABLE users DROP COLUMN 列名;
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
SELECT * FROM users; -- 查询所有
SELECT name, email FROM users WHERE id = 1; -- 条件查询
SELECT * FROM users ORDER BY created_at DESC; -- 排序
SELECT name, COUNT(*) FROM users GROUP BY name; -- 分组聚合
UPDATE users SET name = '李四' WHERE id = 1;
DELETE FROM users WHERE id = 1;

3. 约束、索引与运算符

CREATE INDEX idx_name ON users (name);
CREATE UNIQUE INDEX idx_email ON users (email); -- 唯一索引

第二部分:进阶掌握篇<br/>4. 复杂查询与函数

SELECT u.name, o.order_id, o.amount
FROM users u
INNER JOIN orders o ON u.id = o.user_id;
SELECT name FROM users
WHERE id NOT IN (SELECT DISTINCT user_id FROM orders);

5. 事务处理(Transaction)

START TRANSACTION; -- 或 BEGIN

UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;

-- 如果此时发生错误,可以回滚<br/>-- ROLLBACK;<br/>COMMIT; -- 确认无误后提交

SELECT @@transaction_isolation;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;

6. 存储引擎(Storage Engines)

MySQL 采用插件式存储引擎架构,不同表可使用不同引擎。

CREATE TABLE my_table (id INT) ENGINE = InnoDB;
ALTER TABLE my_table ENGINE = MyISAM;

第三部分:高级优化与架构篇<br/>7. 索引深度解析与优化

-- 假设有复合索引 (name, email)
SELECT name, email FROM users WHERE name = '张三'; -- 覆盖索引
SELECT  FROM users WHERE name = '张三'; -- 需要回表

type: 访问类型,从好到坏: system > const > eq_ref > ref > range > index > ALL。至少要达到 range别。

key: 实际使用的索引。

rows: 预估需要扫描的行数。

Extra: 额外信息,如 Using index(使用了覆盖索引)、Using filesort(需要额外排序)、Using temporary(使用了临时表)等。

8. 查询性能优化

数据库优化方法:

使用 EXPLAIN 分析慢查询。

确保索引被正确使用,避免索引失效(如对索引列进行函数计算、类型转换、LIKE 以 % 开头)。

避免 SELECT ,只取需要的列,鼓励覆盖索引。

优化复杂 JOIN,确保关联字段有索引。

分解大查询,批量处理数据。

9. 数据库设计与范式

三范式(3NF):<br/>

10. 高可用与扩展架构

第四部分:运维与管理篇<br/>11. 备份与恢复

# 备份整个数据库
mysqldump -u root -p --all-databases > alldb_backup.sql
# 恢复
mysql -u root -p < alldb_backup.sql

12. 用户与权限管理

CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'; -- % 允许从任何主机连接
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'newuser'@'%';
FLUSH PRIVILEGES; -- 刷新权限

原则: 遵循最小权限原则,只授予用户必要的权限。<br/>13. 版本新特性(MySQL 8.0+)

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »