当前位置: 首页 > news >正文

【终端使用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: 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 特性:

-- 开启事务
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

在这里插入图片描述

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

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

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

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

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

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

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

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

总结

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

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

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

http://www.dtcms.com/a/466176.html

相关文章:

  • Oracle 数据库在海光平台上运行表现如何?附兼容性验证、性能优化与迁移实践
  • 网站后台账号密码忘记了怎么办宿迁558网络专业做网站
  • go学习1---》结构体和一些其他的东西
  • 兰州网站设计公司厦门网站建设中心
  • git 暂存恢复和文件误删恢复
  • TLS1.3后量子混合密钥协商技术解析及演进展望
  • flutter google play 应用不支持 16 KB
  • 无人机多处理协同作业控制姿态原理与实现
  • flutter mapbox_maps_flutter 应用不支持 16 KB
  • 佛山网站建设的首选求网站
  • 从 0 到 1 精通 MongoDB:实战场景 + 底层原理全解析
  • 建设门户网站的基本意义有哪些wordpress配置页面
  • 技术速递|使用 GitHub Copilot Agent 模式现代化 Java 项目的分步指南
  • 从Apache Doris 学习 HyperLogLog
  • RWA赋能艺术金融:艺术品代币化可行性的探索与展望
  • 成都市网站建html网站首页
  • 网站建设有关书籍创立网站做电商
  • Ansible学习----了解ansible
  • 什么是输入寄存器 什么是输出寄存器 什么是写输入寄存器 什么是读保持寄存器
  • 合网站建设郑州做网站优化地址
  • 现代软件工程课程 个人博客作业
  • 大连网站设计收费标准做免费网站需要营业执照吗
  • 网站打不开 ...有哪些网站做的比较好看
  • 网站建设团队成员网站flash代码
  • 后台启动java jar包的方法
  • 蓝桥杯 取球博弈
  • 怀化百度整站优化服务弹窗网站制作
  • 做外国美食的视频网站云服务器 多个网站
  • 工业设备预测性维护:能源成本降低的“隐藏钥匙”?
  • STM32F103RCT6+STM32CubeMX+keil5(MDK-ARM)+Flymcu完成固定长度的数据的收发