文章目录
- 前言
- [MySQL 数据库核心操作全解析:从入门到性能优化](#MySQL 数据库核心操作全解析:从入门到性能优化)
-
- [一、MySQL 连接与环境验证](#一、MySQL 连接与环境验证)
-
- [1. 连接 MySQL 服务器](#1. 连接 MySQL 服务器)
- [2. 验证当前用户与数据库](#2. 验证当前用户与数据库)
- 二、数据库管理
-
- [1. 查看所有数据库](#1. 查看所有数据库)
- [2. 创建数据库](#2. 创建数据库)
- [3. 切换与删除数据库](#3. 切换与删除数据库)
- 三、表的创建与管理
-
- [1. 查看当前数据库中的表](#1. 查看当前数据库中的表)
- [2. 创建表](#2. 创建表)
- [3. 查看表结构与存储引擎](#3. 查看表结构与存储引擎)
- [4. 修改表结构](#4. 修改表结构)
- 四、数据增删改查(CRUD)
-
- [1. 插入数据](#1. 插入数据)
- [2. 查询数据](#2. 查询数据)
- [3. 更新数据](#3. 更新数据)
- [4. 删除数据](#4. 删除数据)
- 五、索引的使用与管理
-
- [1. 创建索引](#1. 创建索引)
- [2. 查看索引](#2. 查看索引)
- [3. 验证索引是否被使用](#3. 验证索引是否被使用)
- 六、事务与锁机制
-
- [1. 事务的基本操作](#1. 事务的基本操作)
- [2. 锁机制简介](#2. 锁机制简介)
- 七、日志与慢查询分析
-
- [1. 查看日志配置](#1. 查看日志配置)
- [2. 慢查询配置与分析](#2. 慢查询配置与分析)
- 八、索引失效常见情况分析
- 总结
前言
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
MySQL 数据库核心操作全解析:从入门到性能优化
MySQL 作为最流行的关系型数据库之一,在开发中应用广泛。本文基于实际操作,详细讲解 MySQL 的核心操作,包括数据库连接、表管理、数据 CRUD、索引优化、事务、日志分析等内容,适合初学者快速上手并理解底层原理。
一、MySQL 连接与环境验证
1. 连接 MySQL 服务器
使用终端连接 MySQL,需要提供用户名并验证密码:
bash
mysql -u root -p
执行后输入密码,成功连接会显示 MySQL 版本信息和命令提示符 mysql>
:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 30
Server version: 9.4.0 Homebrew
...
mysql>

2. 验证当前用户与数据库
连接后可查看当前登录用户和正在使用的数据库:
sql
-- 查看当前登录用户
SELECT user();
-- 查看当前使用的数据库(刚连接时为 NULL)
SELECT database();
执行结果:
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
+------------+
| database() |
+------------+
| NULL |
+------------+

二、数据库管理
1. 查看所有数据库
sql
show databases;
执行结果:
+--------------------+
| Database |
+--------------------+
| Fu |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

2. 创建数据库
创建数据库时建议指定字符集为 utf8mb4
(支持 emoji 和所有 Unicode 字符):
sql
create database test_db character set utf8mb4 collate utf8mb4_unicode_ci;

3. 切换与删除数据库
sql
-- 切换到 test_db 数据库
use test_db;
-- 验证是否切换成功
select database();
-- 删除数据库(谨慎操作!)
drop database Fu;
执行结果:
Database changed
+------------+
| database() |
+------------+
| test_db |
+------------+

三、表的创建与管理
1. 查看当前数据库中的表
sql
show tables;
新数据库初始为空,执行结果:
Empty set (0.001 sec)
2. 创建表
创建表时需指定字段名、数据类型、约束条件和存储引擎:
sql
create table user (
id int not null auto_increment, -- 自增ID(非空)
name varchar(50) not null, -- 姓名(非空,最长50字符)
age int, -- 年龄(可空)
create_time datetime default current_timestamp, -- 创建时间(默认当前时间)
primary key (id) -- 主键为 id
) engine=InnoDB character set utf8mb4; -- 存储引擎为 InnoDB,字符集 utf8mb4

3. 查看表结构与存储引擎
sql
-- 查看表结构
desc user;
-- 查看表的存储引擎
show table status like 'user';
desc user
执行结果:
+-------------+-------------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+-------------------+-------------------+
| id | int | NO | PRI | NULL | auto_increment |
| name | varchar(50) | NO | | NULL | |
| age | int | YES | | NULL | |
| create_time | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
+-------------+-------------+------+-----+-------------------+-------------------+

4. 修改表结构
添加新字段:
sql
alter table user add gender varchar(10);
四、数据增删改查(CRUD)
1. 插入数据
sql
-- 插入单条数据
insert into user (name, age) values ('张三', 20);
-- 批量插入数据
insert into user (name, age) values ('李四', 25), ('王五', 30);

2. 查询数据
带条件、排序和限制的查询:
sql
select name, age from user where age > 20 order by age desc limit 2;
执行结果:
+--------+------+
| name | age |
+--------+------+
| 王五 | 30 |
| 李四 | 25 |
+--------+------+

3. 更新数据
sql
update user set age=22 where id=1;
4. 删除数据
sql
delete from user where id=3;

五、索引的使用与管理
索引是提升查询性能的关键,合理使用索引可大幅减少查询时间。
1. 创建索引
sql
-- 为 name 字段创建普通索引
create index idx_user_name on user(name);
2. 查看索引
sql
show indexes from user;
执行结果:
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| user | 0 | PRIMARY | 1 | id | A | 2 | NULL | NULL | | BTREE | | | YES | NULL |
| user | 1 | idx_user_name | 1 | name | A | 2 | NULL | NULL | | BTREE | | | YES | NULL |
+-------+------------+---------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

3. 验证索引是否被使用
使用 EXPLAIN
分析查询计划,查看索引使用情况:
sql
explain select * from user where name = '张三';
执行结果中 type: ref
和 key: idx_user_name
表明索引被有效使用:
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+
| 1 | SIMPLE | user | NULL | ref | idx_user_name | idx_user_name | 202 | const | 1 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+---------------+---------+-------+------+----------+-------+

六、事务与锁机制
1. 事务的基本操作
InnoDB 存储引擎支持事务,具有 ACID 特性:
sql
-- 开启事务
start transaction;
-- 执行操作
update account set balance = balance - 100 where id = 1;
update account set balance = balance + 100 where id = 2;
-- 提交事务(所有操作生效)
commit;
-- 或回滚事务(所有操作撤销)
rollback;
2. 锁机制简介
MySQL 中的锁根据粒度分为:
- 表锁:锁定整个表,MyISAM 存储引擎默认使用
- 行锁:仅锁定修改的行,InnoDB 存储引擎默认使用
行锁能提供更好的并发性能,适合写操作频繁的场景。
七、日志与慢查询分析
1. 查看日志配置
sql
-- 错误日志(记录启动/运行错误)
show variables like 'log_error';
-- 通用查询日志(记录所有 SQL 语句,默认关闭)
show variables like 'general_log';
show variables like 'general_log_file';
-- 二进制日志(记录数据修改,用于备份/恢复)
show variables like 'log_bin';
show variables like 'log_bin_basename';
执行结果示例:
+---------------+---------------------+
| Variable_name | Value |
+---------------+---------------------+
| log_error | ./192.168.5.115.err |
+---------------+---------------------+
2. 慢查询配置与分析
慢查询日志记录执行时间超过阈值的 SQL,用于性能优化:
sql
-- 设置慢查询阈值(1秒)
set global long_query_time = 1;
-- 查看慢查询日志路径
show variables like 'slow_query_log_file';
在终端中使用 mysqldumpslow
工具分析慢查询日志:
bash
# 查看执行次数最多的10条慢查询
mysqldumpslow -s c -t 10 /opt/homebrew/var/mysql/192-slow.log

八、索引失效常见情况分析
即使创建了索引,某些查询方式也会导致索引失效:
-
索引列上使用函数或表达式
sql-- 失效 select * from user where year(create_time) = 2023;
-
使用
LIKE '%前缀'
模糊查询sql-- 失效 select * from user where name like '%三';
-
联合索引不满足最左前缀原则
sql-- 联合索引 (name, age),以下查询会失效 select * from user where age = 20;
-
索引列参与运算
sql-- 失效 select * from user where id + 1 = 10;
-
使用
OR
连接非索引列sql-- 若 address 无索引,整个查询索引失效 select * from user where name = '张三' or address = '北京';
总结
本文涵盖了 MySQL 从连接到性能优化的核心操作,通过实际命令演示了数据库管理、表操作、数据 CRUD、索引使用、事务和日志分析等关键知识点。在实际开发中,应注意:
- 合理设计表结构,选择合适的存储引擎(推荐 InnoDB)
- 为查询频繁的字段创建索引,但避免过度索引
- 定期分析慢查询日志,优化低效 SQL
- 使用
EXPLAIN
分析查询计划,确保索引有效使用 - 对关键业务操作使用事务保证数据一致性
掌握这些知识,能够帮助你高效地使用 MySQL 并解决常见的性能问题。