news 2026/4/16 15:24:29

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进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 15:07:02

英语口语资源合集

十六堂实用外教英语口语课程教学 文件大小: 3.5GB内容特色: 16堂纯外教实景口语,高频场景全覆盖适用人群: 想摆脱哑巴英语的大学生与职场人核心价值: 地道发音互动模板,3周敢开口说英语下载链接: https://pan.quark.cn/s/315854f9f7fa 零基础完美英语口…

作者头像 李华
网站建设 2026/4/15 7:23:12

多模态学习架构

一、什么是多模态学习? 多模态(Multimodal)指的是不同类型的数据形式:文本、图像、音频、视频、点云、传感器信号等。人类天然就是多模态学习 者——同时通过视觉、听觉、听觉来理解世界。多模态学习的核心目标是让模型能够联合理…

作者头像 李华
网站建设 2026/4/16 14:36:23

再见了ThreadLocal,我决定用ScopedValue!

今天我们来聊聊一个即将改变我们编程习惯的新特性——ScopedValue。有些小伙伴在工作中,一提到线程内数据传递就想到ThreadLocal,但真正用起来却遇到各种坑:内存泄漏、数据污染、性能问题等等。其实,ScopedValue就像ThreadLocal的…

作者头像 李华
网站建设 2026/4/14 1:06:37

【机器人路径规划】基于6种算法(黑翅鸢优化算法BKA、SSA、MSA、RTH、TROA、COA)求解机器人路径规划研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华