news 2026/1/2 17:55:52

4.1.17.1.MYSQL基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
4.1.17.1.MYSQL基础

1.查询语句的执行流程

第一步,客户端发送SQL查询语句到MySQL服务器
第二步,MySQL服务器的连接器开始处理这个请求,跟客户端建立连接、获取权限、管理连接
第三步(MySQL 8.0以后已经干掉了),连接建立后,MySQL服务器的查询缓存组件会检查是否有缓存的查询结果。如果有,直接返回给客户端;如果没有,进入下一步。
第三步,解析器开始对SQL语句进行解析,检查语句是否符合SQL语法规则,确保引用的数据库、表和列都存在,并处理SQL语句中的名称解析和权限验证
第四步,优化器负责确定SQL语句的执行计划,这包括选择使用哪些索引,以及决定表之间的连接顺序等。优化器会尝试找出最高效的方式来执行查询。
第五步,执行器会调用存储引擎的API来进行数据的读写。
第六步,MySQL的存储引擎是插件式的,不同的存储引擎在细节上面有很大不同。例如,InnoDB是支持事务的,而MyISAM是不支持的。之后,会将执行结果返回给客户端
第七步,客户端接收到查询结果,完成这次查询请求。

2.MYSQL移除查询缓存的原因

2.1.性能瓶颈明显

在现代高并发应用中,查询缓存反而成为性能瓶颈。

缓存的维护和失效操作会引起严重的锁竞争,尤其是在 InnoDB 存储引擎下。

2.2.使用率下降

很多用户根本不使用查询缓存,或者使用不当。

大部分性能优化依赖InnoDB Buffer Pool和应用层缓存(如RedisMemcached),而不是查询缓存。

2.3.替代方案更高效

InnoDB Buffer Pool 可以高效缓存热点数据和索引。

应用层缓存更灵活,可缓存查询结果或业务对象,避免数据库内部复杂锁竞争。

3.MYSQL常用命令

3.1.数据库操作

创建数据库:
CREATE DATABASE database_name;

删除数据库:
DROP DATABASE database_name;
选择数据库:
USE database_name;

3.2.表操作


①创建表:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
...
);
②删除表:
DROP TABLEtable_name;
③显示所有表:
SHOW TABLES;
④查看表结构:
DESCRIBEDESCtable_name;
⑤修改表(添加列):
ALTER TABLE table_name ADD column_name datatype;


3.3.CRUD 命令


①插入数据:
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
②查询数据:
SELECT column_names FROM table_name WHERE condition;
③更新数据:
UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;
④删除数据:
DELETE FROM table_name WHERE condition;


3.4.说说索引和约束的创建修改命令


①创建索引:
CREATE INDEXindex_nameONtable_name (column_name);
②添加主键约束:
ALTER TABLEtable_nameADD PRIMARY KEY (column_name);
③添加外键约束:
ALTER TABLEtable_nameADD CONSTRAINTfk_nameFOREIGN KEY(column_name) REFERENCES parent_table (parent_column_name);

3.5.用户和权限管理的命令

①创建用户:
CREATE USER'username'@'host'IDENTIFIED BY'password';
②授予权限:
GRANT ALL PRIVILEGES ON database_name.table_nameTO'username'@'host';
③撤销权限:
REVOKE ALL PRIVILEGES ONdatabase_name.table_nameFROM'username'@'host';
④删除用户:
DROP USER'username'@'host';

3.6.事务控制的命令

①开始事务:
START TRANSACTION;
②提交事务:
COMMIT;
③回滚事务:
ROLLBACK;

④关闭自动提交模式

SET autocommit = 0; --关闭自动提交

3.7.分组

①按指定列分组,并对每组数据执行聚合计算。

SELECTID,ADDTIME FROM YONGHU GROUP BY ID;

②统计每个用户的订单总金额。

SELECTuser_id,SUM(amount) AS total_amountFROMordersGROUP BYuser_id;

③按用户和订单状态组合维度统计记录数。

SELECTuser_id, status,COUNT(*) AS cntFROM ordersGROUP BY user_id, status;

④分组后过滤数据(HAVING)

SELECT user_id, SUM(amount) AS total FROM orders GROUP BY user_id HAVING total > 100;

HAVING是用于过滤分组后的数据,与WHERE不同,WHERE是用于过滤分组前的数据

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/27 10:37:09

AI论文工具怎么选?6款详细对比+2025年推荐清单

毕业季近在眼前,论文查重和AI痕迹检测的压力让你头疼不已?别慌!作为亲身测试过多款AI论文工具的博主,我明白那种选择恐惧症——工具太多,功能眼花缭乱,选不对就白费功夫。今天,我就带大家走进20…

作者头像 李华
网站建设 2025/12/27 10:21:46

高性能音频处理:深入解析无锁环形缓冲区 (Lock-Free Ring Buffer)

高性能音频处理:深入解析无锁环形缓冲区 (Lock-Free Ring Buffer) 在实时音频处理领域,性能和低延迟是至关重要的。传统的互斥锁(Mutex)虽然能保证线程安全,但在高并发或实时性要求极高的场景下,锁竞争导致…

作者头像 李华
网站建设 2025/12/28 13:40:38

GPT5.2有哪些最新优势特点?10000字长文带您了解

目录 0 先把名词对齐:你说的“ChatGPT5.2”到底指什么? 1 最直观的“用户侧优势”:更像把工作交付物一次做完 1.1 对“专业知识工作”的提升不是一句口号:官方拿 GDPval 作为主证据 1.2 在 ChatGPT 里,你会更明显感…

作者头像 李华
网站建设 2025/12/27 16:48:09

基于springboot的运动服服饰销售购买商城系统

博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…

作者头像 李华