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

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是用于过滤分组前的数据

http://www.rkmt.cn/news/94889.html

相关文章:

  • 2025年论文写作必备:实测6款AI工具后的良心推荐
  • 微信小程序开发实战之 01-微信小程序入门
  • neural network中的loss function (一)
  • AI论文工具怎么选?6款详细对比+2025年推荐清单
  • 缺少libgcc_s_seh-1.dll
  • 走向场景,走向融合:2025年末国产大模型的平台化竞赛与Agent新范式
  • 陪诊陪护小程序系统上门陪护代挂号排队跑腿买药陪诊php开发原生微信小程序系统
  • GPT5.2有哪些最新优势特点?10000字长文带您了解
  • LeetCode046全排列
  • PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(“Text“));---核心是:INotifyPropertyChanged接口
  • 【大模型预训练】07-数据处理流程设计:从原始数据到模型输入的端到端处理链路
  • 基于VMD-CPA-KELM-IOWAl-CSA-LSSVM碳排放的混合预测模型研究附Matlab代码
  • 系统基础服务
  • Python基础知识的总结(2)
  • Go程序的执行顺序
  • JavaWeb-Request应用与Cookie[特殊字符]️Session
  • 数据结构:二叉排序树,平衡二叉树,红黑树的介绍
  • 基于条件风险价值CVaR的微网动态定价与调度策略附Matlab代码
  • Go语言变量
  • 架构系统序化
  • OpenVSCode Server终极性能调优与资源管理完整指南
  • ASP毕业设计题目推荐:基于ASP+Access的校园二手交易平台设计与实现
  • 【Arduino Uno】数码管模拟值实验
  • 进程PCB
  • Springboot医药采购管理2mqc3(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • LeetCode 41. 缺失的第一个正数 | 原地哈希最优解全解析
  • 线性回归模型
  • 榛子矮砧密植:水肥一体化系统的铺设要点指南
  • java基础流程控制笔记
  • 校招 Java 面试必看:JVM 其实就考这 3 个点(我帮你讲透)