【终端使用MySQL】MySQL 数据库核心操作全解析:从入门到性能优化
文章目录
- 前言
- MySQL 数据库核心操作全解析:从入门到性能优化
- 一、MySQL 连接与环境验证
- 1. 连接 MySQL 服务器
- 2. 验证当前用户与数据库
- 二、数据库管理
- 1. 查看所有数据库
- 2. 创建数据库
- 3. 切换与删除数据库
- 三、表的创建与管理
- 1. 查看当前数据库中的表
- 2. 创建表
- 3. 查看表结构与存储引擎
- 4. 修改表结构
- 四、数据增删改查(CRUD)
- 1. 插入数据
- 2. 查询数据
- 3. 更新数据
- 4. 删除数据
- 五、索引的使用与管理
- 1. 创建索引
- 2. 查看索引
- 3. 验证索引是否被使用
- 六、事务与锁机制
- 1. 事务的基本操作
- 2. 锁机制简介
- 七、日志与慢查询分析
- 1. 查看日志配置
- 2. 慢查询配置与分析
- 八、索引失效常见情况分析
- 总结
前言
若对您有帮助的话,请点赞收藏加关注哦,您的关注是我持续创作的动力!有问题请私信或联系邮箱:funian.gm@gmail.com
MySQL 数据库核心操作全解析:从入门到性能优化
MySQL 作为最流行的关系型数据库之一,在开发中应用广泛。本文基于实际操作,详细讲解 MySQL 的核心操作,包括数据库连接、表管理、数据 CRUD、索引优化、事务、日志分析等内容,适合初学者快速上手并理解底层原理。
一、MySQL 连接与环境验证
1. 连接 MySQL 服务器
使用终端连接 MySQL,需要提供用户名并验证密码:
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. 验证当前用户与数据库
连接后可查看当前登录用户和正在使用的数据库:
-- 查看当前登录用户
SELECT user();-- 查看当前使用的数据库(刚连接时为 NULL)
SELECT database();
执行结果:
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------++------------+
| database() |
+------------+
| NULL |
+------------+
二、数据库管理
1. 查看所有数据库
show databases;
执行结果:
+--------------------+
| Database |
+--------------------+
| Fu |
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
2. 创建数据库
创建数据库时建议指定字符集为 utf8mb4
(支持 emoji 和所有 Unicode 字符):
create database test_db character set utf8mb4 collate utf8mb4_unicode_ci;
3. 切换与删除数据库
-- 切换到 test_db 数据库
use test_db;-- 验证是否切换成功
select database();-- 删除数据库(谨慎操作!)
drop database Fu;
执行结果:
Database changed+------------+
| database() |
+------------+
| test_db |
+------------+
三、表的创建与管理
1. 查看当前数据库中的表
show tables;
新数据库初始为空,执行结果:
Empty set (0.001 sec)
2. 创建表
创建表时需指定字段名、数据类型、约束条件和存储引擎:
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. 查看表结构与存储引擎
-- 查看表结构
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. 修改表结构
添加新字段:
alter table user add gender varchar(10);
四、数据增删改查(CRUD)
1. 插入数据
-- 插入单条数据
insert into user (name, age) values ('张三', 20);-- 批量插入数据
insert into user (name, age) values ('李四', 25), ('王五', 30);
2. 查询数据
带条件、排序和限制的查询:
select name, age from user where age > 20 order by age desc limit 2;
执行结果:
+--------+------+
| name | age |
+--------+------+
| 王五 | 30 |
| 李四 | 25 |
+--------+------+
3. 更新数据
update user set age=22 where id=1;
4. 删除数据
delete from user where id=3;
五、索引的使用与管理
索引是提升查询性能的关键,合理使用索引可大幅减少查询时间。
1. 创建索引
-- 为 name 字段创建普通索引
create index idx_user_name on user(name);
2. 查看索引
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
分析查询计划,查看索引使用情况:
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 特性:
-- 开启事务
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. 查看日志配置
-- 错误日志(记录启动/运行错误)
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,用于性能优化:
-- 设置慢查询阈值(1秒)
set global long_query_time = 1;-- 查看慢查询日志路径
show variables like 'slow_query_log_file';
在终端中使用 mysqldumpslow
工具分析慢查询日志:
# 查看执行次数最多的10条慢查询
mysqldumpslow -s c -t 10 /opt/homebrew/var/mysql/192-slow.log
八、索引失效常见情况分析
即使创建了索引,某些查询方式也会导致索引失效:
-
索引列上使用函数或表达式
-- 失效 select * from user where year(create_time) = 2023;
-
使用
LIKE '%前缀'
模糊查询-- 失效 select * from user where name like '%三';
-
联合索引不满足最左前缀原则
-- 联合索引 (name, age),以下查询会失效 select * from user where age = 20;
-
索引列参与运算
-- 失效 select * from user where id + 1 = 10;
-
使用
OR
连接非索引列-- 若 address 无索引,整个查询索引失效 select * from user where name = '张三' or address = '北京';
总结
本文涵盖了 MySQL 从连接到性能优化的核心操作,通过实际命令演示了数据库管理、表操作、数据 CRUD、索引使用、事务和日志分析等关键知识点。在实际开发中,应注意:
- 合理设计表结构,选择合适的存储引擎(推荐 InnoDB)
- 为查询频繁的字段创建索引,但避免过度索引
- 定期分析慢查询日志,优化低效 SQL
- 使用
EXPLAIN
分析查询计划,确保索引有效使用 - 对关键业务操作使用事务保证数据一致性
掌握这些知识,能够帮助你高效地使用 MySQL 并解决常见的性能问题。