group by
user表中有两个a,一个b,一个c用户(name),年龄分别为5,6,7 select name,count(*) from usr group by name; name count(*) a 2 b 1 c 1 group by 字段 with rollup (可以根据某字段排序然后计算其他字段的和,平均数等) select name,count(age) as age from usr group by name with rollup name age a 10 b 6 c 7 null 23(总和) 我们可以使用coalesce来设置一个取代null的名称,coalesce coalesce(a,b,c):a为空则取b,b为空则取c,c为空则为null,a不为空则取a select coalesce(name,'总数'),count(age) as age from usr group by name with rollup name age a 10 b 6 c 7 总数 23
连接查询
外联接: 1->A左外连B无where条件取左表A所有 2->A左外连B有where条件(B is null) 取A除去B的部分 3->A右外连B无where条件取右表B所有 4->A右外连B有where条件(A is null) 取B除去A的部分 内连接: 1->取A和B共有的部分 full outer join: 1->无where条件取A和B的所有(相当于左外连和右外连接的结合取量表所有) 2->有where条件(A is null OR B is null)取A,B所有除去A,B共有的部分(相当于A,B内连接的取反)
REGEXP正则
用法: where 字段 regexp '^d' 操作符: ^ 以什么开头 $ 以什么结尾 xx 包含xx a|b|c 例如'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
mysql事务
mysql事务主要用于处理操作量大,复杂度高的数据,在一个人员管理系统中想要删除一个人员,需要删除他的邮箱,基本资料等,这些数据的操作语句就构成了一个事务.
mysql索引
索引分为单列索引和多列索引
MYSQL索引的建立对于mysql的高效运行是很重要的,索引可以大大提高mysql的检索速度.
实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录
过多的滥用会降低更新表的速度,如对表进行insert,update,delete.因为更新表的时候,mysql不仅要保存数据,还要保存一下索引文件.
MYSQL函数
关于时间的函数:
//获取当前的日期和时间(2020-06-01 14:16:59) now() //获取当前的日期(2020-06-01) curdate() //获取当前的时间(14:16:59) curtime() //获取时间的指定片段(unix可以是day,hour等,xxx指的是时间的字段) extract(unix from xxx) //格式化指定时间为日期格式 date(xxx) //格式换时间格式 from_unixtime(xxx,'%y-%m-%d') //格式换时间格式 date_format(xxx,'%y-%m-%d') //向日期添加指定的时间间隔 date_add(date,interval expre type) //向日期减去指定的时间间隔 date_sub(xxx,interval expr type) //获取两个时间之间的差的天数 datediff(xxx,xxx)
字符串拼接
//注意如果一个参数为null,则返回null concat() //注意分隔符为null则返回null,函数会忽略分隔符后面的null值 concat_ws()分隔符可以是一个字符串也可以是一个参数 select concat_ws(',','11','22','33')==>11,22,33 select concat_ws(',','11','22',null)==>11,22 group_cancat()//默认为逗号分隔如需设置分隔符group_concat(字段 separator ';') mysql> select * from aa; +------+------+ | id| name | +------+------+ |1 | 10| |1 | 20| |1 | 20| |2 | 20| |3 | 200 | |3 | 500 | +------+------+ select id group_concat(name order by name desc) from aa group by id +------+---------------------------------------+ |1 | 20,20,10 | |2 | 20| |3 | 500,200| +------+---------------------------------------+
复制repeat(字段,份数)
select repeat('ab',2); +----------------+ | abab | +----------------+
字符串截取substring()
1:从左开始截取字符串 left(截取的字段,截取的长度) 2:从右开始截取字符串 right(截取的字段,截取的长度) 3:截取字符串 substring(截取字段,从第几位开始,截取的长度) 4:按关键字截取字符串//注意如果出现得第几位为负数则从后面数 substring_index(截取字段,关键字,关键字出现的第几位) +----------------+ | abab | +----------------+ substring_index(字段,b,1)==>a substring_index(字段,b,2)==>aba substring_index(字段,b,3)==>abab substring_index(字段,b,-2)==>ab
数学函数
ABS(x):返回x的绝对值 SIGN(x):返回参数是正数负数还是0;正数返回1,负数返回-1,0返回0 MOD(N,M)取模 FLOOR(x):返回不大于x的整数值 CEILING(x):返回不小于x的整数值 ROUND(X,D):将参数x四舍五入到最近的整数 DIV():整除