mysql数据库sql学习
mysql学习
group by学习
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT product, SUM( guidance_price ) AS guidancePrice, COUNT( enterprise_name ) AS enterpriseNumber, sum( order_quantity ) AS orderQuantity, sum( order_amount ) AS orderAmount, sum( capacity ) AS capacity, sum( yield ) AS yield FROM enterprise_data WHERE node_id = 'CM-CAUS' GROUP BY product |
聚合函数:
min()、max()、sum()、count()、avg()
注意:忽略null值
字符函数;
length();括号内数据的字节长度
concat():将括号内的数据进行拼接
substring()截取
substring()
replace()
日期类型:
year()、month()、day()、
功能性函数:
ifnull()判断是否为null
if(),判断
null参与运算都是null
查看数据库时区:
show variables like '%time_zone%';
select now()
常见的查询
1、空值参与运算
select salart*(1+ifnull(commission_pct,0)) from table_name
2、着重号
select * from `order` 关键字
3、查询常数
select '汉字',123 from table
连接查询
内连接,外连接
内连接是两张表都符合查出来
外连接是都查出来
mysql子查询:条件子查询和表子查询
条件子查询是放到where后面的查询(单行单列、多行单列any或者是all、单行多列,多个列都写上)
表子查询是放到from后面的查询,必须起别名
分组查询
group by 字段 having having是对分组之后的筛选、where是对分组前的筛选。
sql优化:
1、查询SQL尽量不要使用select *,而是具体字段,效率降低
2、当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
3、尽量使用数值替代字符串类型,字符会降低效率,字符进行比较
4、避免在where子句中使用!=或<>操作符 会使索引失效
5、提高group by语句的效率 先做过滤,在分组
select job,avg(salary) from employee where job ='develop' or job = 'test' group by job;
6、使用索引列上内置函数,索引失效。
7、模糊查询,程序员最喜欢的就是使用like
,但是like
很可能让你的索引失效。避免使用全模糊
8、where后面的字段,留意其数据类型的隐式转换,会使索引失效
9、根据数据分布,索引可能失效或者有效。
10、sql提示,指定mysql使用哪个索引(force index)
覆盖索引:
回表查询:
索引总结:
case when语法学习:
select teer .expert_tenant_id , teer .expert_tenant_name , teer .good_area , case when ter.state = null then '未诊断' else '已诊断' end as state, ter.export_time from
distinct对多列进行去重,不是对一个字段去重的
union去重、union all不去重
sql优化
口诀:
首先分析是否是子查询、是否是多表查询、明确查询几列、明确是否包含其他条件、是否需要分组、是否需要排序。
mysql运维篇
mysql有记录错误日志的地址,可以排除mysql运行的时候出现的错误。
二进制日志
作用:灾难的数据恢复,mysql的主从复制
默认过期时间是30天
查询日志:默认未开启
记录所有的操作包括增删改查ddl语句
慢查询日志:默认未开启
主从复制:
mysql锁:
全局锁:数据库所有的表,数据备份的时候使用 flush table with read lock;
如何解决备份数据库堵塞状态:--single-transation命令添加,读快照
表级锁:lock tables 表名 read/write unlock tables;解锁 读锁不能写操作,可以读,如果是写锁,当前客户端可以读写,另外的客户端不能读和写。
元数据锁:不可以对元数据进行写入操作。
行级锁:共享锁,排他锁
间隙锁:两条数据之间加的锁。
逻辑存储结构:
表空间,段、区、页、行
内存结构:buffer pool缓冲池、
mysql数据结构:
二叉树:如果是自增的,数据会偏向一边,等同于全表扫描了。
红黑树:会做平衡,比二叉树好一点。为啥mysql没有选择这个,是层级太深了。
hash表:数值加链表(单向链表)
btree:
b+tree:双向链表
联合索引:
myisan和innodb存储引擎
数据库分库分表
垂直拆分:例如微服务就是一种体现、把字段拆分。
水平拆分:按照规则把数据放到不同的库和表里面。
问题:事务、join、id自增、开发难度
解决:框架,shardingsphere、tddl、mycat
参考:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=88&spm_id_from=pageDriver
参考:https://m.php.cn/article/487049.html
mysql的json字段操作参考:68.MySQL的JSON格式支持 - 架构 (jiagou.com)
买的书籍地址:MySQL 是怎样运行的:从根儿上理解 MySQL - 小孩子4919 - 掘金课程 (juejin.cn)
动态数据结构验收网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html
日志:binlog、relaylog、errorlog、slowlog、undolog、redolog
顺序读写和随机读写
二阶段提交
redolog添加状态标识
mvcc隐藏字段:db_trx_id,db_roll_ptr,db_row_id
Unknown collation: ‘utf8mb4_0900_ai_ci’的解决方法
参考:https://blog.csdn.net/listeningdu/article/details/128075582
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?