系统运维系列 之MySQL部分学习整理1

Posted 琅晓琳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了系统运维系列 之MySQL部分学习整理1相关的知识,希望对你有一定的参考价值。

1 前言
本部分对于mysql数据库工作机制及其语法做一个整理,用于之后重点内容的查询和交流。

2 包含内容
数据库工作机制、语法基础、重要内容整理、语句优化、效率提升等。

3 MySQL的字段约束

3.1 其中AUTO_INCREMENT必须和PRIMARY KEY一起使用,但PRIMARY KEY则不需要,自增从1开始;
3.2 每个数据表中只能有一个PRIMARY KEY,且不为空,保证唯一性;
3.3 唯一约束:UNIQUE KEY,可以保证记录的唯一性,可以为空值,每张数据表可以有多个唯一约束;
3.4 外键约束:FOREIGN KEY,保持数据一致性,完整性,实现一对一或者一对多的关系;
3.5 外键约束的要求:父表和子表必须具有相同的存储引擎,禁止使用临时表。数据表的存储引擎只能为InnoDB。外键列和参照列必须具有相似的数据类型。外键列和参照列必须创建索引,查看索引—>SHOW INDEXES FROM tab_name。

4 Having和Where
两个字段均可以用于条件查询,Having使用的场景更多,可用于Group by之后的条件筛选,但是相比于Where效率更低。

5 Limit的使用
如:select * from tab1 limit 3,3;
含义是越过三条之后取三条数据,同样可以和一些排序或者条件语句之后使用;场景是可以用于分页展示,第一个数字3代表当前页数-1。
需要按照以下顺序使用后面的语句:

6 ROUND函数的使用
如:四舍五入,保留两位小数。
select ROUND(AVG(price),2) FROM tab1;

7 ANY SOME ALL关键字的使用

其中,=ANY运算符与IN等效,!=ALL或者<>ALL运算符与NOT IN等效。

8 多表更新操作
如:能存数字则存数字,效率比字符串高
UPDATE tab1 INNER JOIN tab2 ON tab1.name1=tab2.name2 SET tab1.name1=tab2.id2;

9 查询表字段类型、结构等
9.1 SELECT * FROM tab1;
9.2 DESC tab1;

10 多表查询举例
将课程和省份显性的显示出来,用到两个INNER JOIN语句连接。

两个语句整理(INNER JOIN和WHERE)
INNER JOIN:
SELECT a.id,a.username,a.sex,b.name,c.price FROM tab_a AS a INNER JOIN tab_b AS b ON b.id=a.cid INNER JOIN tab_c AS c ON c.id=a.proid;
WHERE:
SELECT a.id,a.username,a.sex,b.name,c.price FROM tab_a AS a,tab_b AS b,tab_c AS c WHERE b.id=a.cid AND c.id=a.proid;

11 自身查询举例

输出父类及其子类数量:
SELECT p.id,p.name,count(s.name) AS num FROM class_type AS p LEFT JOIN class_type AS s ON s.pid=p.id WHERE p.pid=0 GROUP BY p.name;

12 多表删除举例
删除id较大的重复记录

DELETE t1 FROM user AS t1 LEFT JOIN (select id,username FROM user GROUP BY username HAVING count(username) > 1) AS t2 ON t1.username=t2.username WHERE t1.id > t2.id;

参考资料:
https://www.bilibili.com/video/BV19M4y1u7mF?p=35&spm_id_from=pageDriver 搭建MySQL数据存储架构

以上是关于系统运维系列 之MySQL部分学习整理1的主要内容,如果未能解决你的问题,请参考以下文章

系统运维系列 之MySQL部分学习整理4

系统运维系列 之MySQL部分学习整理3

系统运维系列 之MySQL部分学习整理5

系统运维系列 之MySQL部分学习整理5

系统运维系列 之Clickhouse数据库学习集锦(接查询优化问题整理)

系统运维系列 之linux系统下常用查找命令整理