五、MySQL常用函数
5-1、基本函数
数学运算:
-- 数学运算
SELECT ABS(-8) AS '绝对值'-- 取绝对值
SELECT CEILING (3.14) AS '向上取整' -- 向上取整
SELECT FLOOR (3.14) AS '向下取整' -- 向下取整
SELECT RAND() -- 返回 [0,1) 随机数
SELECT SIGN(0) -- 判断一个数的符号 0 => 0 , 负数 => -1 , 正数=> 1
字符串:
SELECT CHAR_LENGTH('hello') -- 字符串长度
SELECT CONCAT('hello','world') -- 字符串 拼接
SELECT LOWER('HELLO') -- 转小写
SELECT UPPER('hello') -- 转大写
SELECT INSTR('l') -- 返回第一次出现子串 l 的索引
SELECT REPLACE('l','a') -- 把子串 l 替换为 a
SELECT substr('helloWorld',5,2) -- 截取字符串(源字符串,起始位置,截取长度):WO
SELECT reverse('helloWorld') -- 反转字符串
时间和日期:( 记住 )
SELECT NOW() -- 返回当前的时间,日期+时分秒(记个最简单的就行)
SELECT LOCALTIME() -- 返回本地的时间,日期+时分秒
SELECT SYSDATE()-- 返回系统的时间,日期+时分秒
SELECT CURDATE() -- 返回当前的日期
SELECT CURRENT_DATE() -- 返回当前的日期
系统:( 记住 )
SELECT USER() -- 返回当前用户
SELECT SYSTEM_USER() -- 返回当前用户
SELECT VERSION() -- 返回当前版本号
5-2、聚合函数(常用)
函数名称
描述
count()
计数
avg()
平均值
sum()
求和
max()
最大
min()
最小
相似的 count(*) 和 count(1)比较:
count(1):其实就是计算一共有多少符合条件的行。1并不是表示第一个字段,而是表示一个固定值。其实就可以想成表中有这么一个字段,这个字段就是固定值1,count(1),就是计算一共有多少个1.
count(*):执行时会把星号翻译成字段的具体名字,效果也是一样的,不过多了一个翻译的动作,比固定值的方式效率稍微低一些。
总结:count(*),count(1) 和 count(列名)
如果表中存在主键,count(主键列名)效率最优
如果表中只有一列,则count(*)效率最优
如果表有多列,且不存在主键,则count(1)效率优于count(*)
网上的实验结论:
该Table数据量:33681874(千万级)
根据执行计划,都是走PK查询,所有时间基本相差不大,如下:
Count(1):00:00:05.13;
count(*):00:00:05.29;
Count(主键):00:00:05.07;
Count(Index):00:00:05.10;
Count(普通列):00:00:05.29;
所以对于有主键非null的Table来说,执行效率:
Count(主键) > Count(Index) > Count(1) > Count(*) = Count(普通列)
网友:
现在cout(1)和count(*) 系统会自动做优化走索引还是全表,三者性能差别不大。
5-3、MD5 加密函数
-- MD5 明文加密
SELECT MD5(123456)
如何校验?
把传入的值,加密,再和表中已经加过密的值判断。