【终端使用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 并解决常见的性能问题。

相关推荐
刘一哥GIS3 小时前
Windows环境搭建:PostGreSQL+PostGIS安装教程
数据库·python·arcgis·postgresql·postgis
云和数据.ChenGuang3 小时前
uri: mongodb://jack:123456@localhost://27017 数据库访问其他的写法
数据库·mongodb·oracle
ManageEngineITSM3 小时前
IT 服务自动化的时代:让效率与体验共进
运维·数据库·人工智能·自动化·itsm·工单系统
SelectDB3 小时前
Apache Doris 内部数据裁剪与过滤机制的实现原理
数据库·数据分析·github
Chan163 小时前
批处理优化:从稳定性、性能、数据一致性、健壮性、可观测性五大维度,优化批量操作
java·spring boot·后端·性能优化·java-ee·intellij-idea·优化
Derrick__13 小时前
Python访问数据库——使用SQLite
数据库·python·sqlite
Databend4 小时前
Databend 九月月报:自增列 AUTOINCREMENT 与行级安全
数据库
-雷阵雨-4 小时前
MySQL——数据库入门指南
数据库·mysql
玄妙尽在颠倒间5 小时前
SQL中的四大核心语言:DQL、DML、DDL、DCL
大数据·数据库