sql语法
# 基本语法
select cola as "列a", colb from tba as a where a.id = 1;
select a.cola, b.colb from tba as a, tbb as b where a.cola = b.colb and a.cola>2;
# join
inner join 取交集
full outer join 取并集
left join 以左边为主
right join 以右边为主
select a.cola, b.colb from tba as a left join tbb as b on a.colc = b.colc;
select a.cola, b.colb from tba as a full outer join tbb as b on a.colc = b.colc where a.colc is null or b.colc is null; // 查找除了交集之外全部
# group by
select sum(cola) as "人数" from tba as a group by a.colb;
# where和having的区别
where是在分组之前筛选,筛选条件不能包含聚合函数,having是在分组之后筛选,筛选条件可以包含聚合函数,比如:
select sum(cola) as "人数" from tba as a group by a.colb having sum(cola) > 10;
# 常用聚合函数
平均值svg()、计数count()、max()最大值、min()最小值、求和sum()、此外还有求方差和标准差4个。
# 常用时间函数
获取当前日期current_date()、对日期进行加减操作date_add()、计算两个日期之间的间隔天数datediff()、时间戳转换
select date_add(a.cola, interval 3 month) from tba; // 原日期加上3个月。
主要的时间单位:YEAR, MONTH, DAY, HOUR, MINUTE, SECOND。
# 常用字符串函数
大小写转换upper()lower()、去掉字符串两边的空格trim()ltrim()rtrim()、截取字符串left()right()substring()
# 分页
select cola from tba limit pagesize offset (pagenumber-1)*pagesize;
索引
MySQL的索引就是将属性列进行哈希计算,保存到哈希表中,键是属性列的哈希值,值是当前行数据在磁盘上的存储位置,索引的哈希表的存储结构有二叉树、平衡二叉树、红黑树、B树、B+树,这些数据结构将会在下一个章节讲解。
B+树
索引的每种存储结构都各有其优缺点。只说5种结构。
二叉树:比全表扫描快,但是存在2个问题,没有自平衡功能的极端情况是变成单链表全表扫描,每个节点都只有2个子节点导致数据量大的情况下树的层级可能会非常深,结果就是查询速度慢。
平衡二叉树:会对树进行旋转,保证树平衡,平衡的标准就是任何节点的左右子树高度差不超过1,解决了二叉树退化成单链表的问题,但是带来另一个问题,频繁的旋转操作降低了插入数据的速度,同时仍存在数据量上来之后层级深的问题。
红黑树:红黑树要求左右子树的高度差最大是2倍的关系,对平衡的要求较弱,提高了插入数据的速度,但是还没解决层级深的问题。
Btree和B+tree都是允许每个节点都多个子节点,解决了树的层级深的问题,二者的区别在于btree的根节点和叶子节点都有数据,而b+tree的非叶子结点只保存索引值和下级节点的地址,不保存数据,叶子节点保存索引值和每一行的数据。
分库分表
当数据库数据太多的时候,可能磁盘存不下,同时查找速度也会下降。所以多数据库进行分库分表。
分库分表工具
shardingsphere