【终端使用MySQL】MySQL 数据库核心操作全解析:从入门到性能优化

文章目录

  • 前言
  • [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: refkey: 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

八、索引失效常见情况分析

即使创建了索引,某些查询方式也会导致索引失效:

  1. 索引列上使用函数或表达式

    sql 复制代码
    -- 失效
    select * from user where year(create_time) = 2023;
  2. 使用 LIKE '%前缀' 模糊查询

    sql 复制代码
    -- 失效
    select * from user where name like '%三';
  3. 联合索引不满足最左前缀原则

    sql 复制代码
    -- 联合索引 (name, age),以下查询会失效
    select * from user where age = 20;
  4. 索引列参与运算

    sql 复制代码
    -- 失效
    select * from user where id + 1 = 10;
  5. 使用 OR 连接非索引列

    sql 复制代码
    -- 若 address 无索引,整个查询索引失效
    select * from user where name = '张三' or address = '北京';

总结

本文涵盖了 MySQL 从连接到性能优化的核心操作,通过实际命令演示了数据库管理、表操作、数据 CRUD、索引使用、事务和日志分析等关键知识点。在实际开发中,应注意:

  1. 合理设计表结构,选择合适的存储引擎(推荐 InnoDB)
  2. 为查询频繁的字段创建索引,但避免过度索引
  3. 定期分析慢查询日志,优化低效 SQL
  4. 使用 EXPLAIN 分析查询计划,确保索引有效使用
  5. 对关键业务操作使用事务保证数据一致性

掌握这些知识,能够帮助你高效地使用 MySQL 并解决常见的性能问题。

相关推荐
小光学长16 分钟前
基于微信小程序的背单词系统x1o5sz72(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·微信小程序·小程序
我命由我123451 小时前
Derby - Derby 服务器(Derby 概述、Derby 服务器下载与启动、Derby 连接数据库与创建数据表、Derby 数据库操作)
java·运维·服务器·数据库·后端·java-ee·后端框架
RestCloud3 小时前
达梦数据库到Greenplum:用ETL工具实现数据仓库迁移
数据库·数据仓库·etl·达梦数据库·数据传输·greenplum
Boilermaker19924 小时前
【Redis】集群与分布式缓存
java·数据库·redis·1024程序员节
敲代码的猴先生4 小时前
技术分享 | torch.profiler:利用探针收集模型执行信息的性能分析工具
人工智能·pytorch·经验分享·语言模型·性能优化
武子康4 小时前
Java-163 MongoDB 生产安全加固实战:10 分钟完成认证、最小权限、角色详解
java·数据库·分布式·mongodb·性能优化·系统架构·nosql
zhangyifang_0094 小时前
PostgreSQL 的表继承与分区
数据库·postgresql
金仓拾光集5 小时前
国产化转型实战:制造业供应链物流系统从MongoDB至金仓数据库迁移全指南
数据库·mongodb·数据库平替用金仓·金仓数据库
天天进步20155 小时前
Django vs Flask:2025年该如何选择Python Web框架?
数据库·sqlite
JavaTree20175 小时前
【MySQL】mysqldump使用方法
数据库·mysql