mysql数据库sql学习

mysql学习

group by学习

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

posted @ 2020-12-16 10:55  刘百会  阅读(88)  评论(0编辑  收藏  举报