MYSQL基础之函数:流程函数以及加解密等函数

无论任何语言都应该有自己的控制流程的函数,而Mysql 也是。其用到的关键字和其它的编程语言差不多也是IF,CASE等,所以本篇最重要的函数就是控制流程。

控制流程函数

流程控制说白了就是根据不同的条件,执行不同的处理流程。可以在SQL语句中实现不同的条件选择。所以下面还是先将常用的处理函数列出。

函数作用
IF(v,v1,v2)如果v的值为true,返回v1,否则返回v2
IFNULL(v1,v2)如果值为NULL,返回v1,否则返回v2
CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2…[ELSE result] END这个说白了就是 if else if else的多个判断语句
CASE expr WHEN 常量1 THEN 值1 WHEN 常量2 THEN 值2…[ELSE 值n] END这个说白了就是 swich… case 的多个判断语句

现在开始演示。

SELECT 	empno, ename, job, mgr, hiredate, sal, comm,IF(comm<=>NULL,0,comm), deptno FROM test.emp 

在这里插入图片描述

SELECT 	empno, ename, job, mgr, hiredate, sal, comm, IFNULL(comm,0), deptno FROM test.emp 

在这里插入图片描述

SELECT 	empno, ename, job, mgr, hiredate, sal, comm,  deptno,CASE WHEN sal>4000 THEN  "可劲浪活着"  WHEN sal>2000 THEN  "潇洒活着" WHEN sal>500 THEN "凑活活着"  ELSE "活着干嘛" END  "瞎说而已" FROM test.emp 

在这里插入图片描述

SELECT 	empno, ename, job, mgr, hiredate, sal, comm,  deptno,CASE sal WHEN  5000 THEN  "可劲浪活着"  WHEN  3000 THEN  "潇洒活着" WHEN 800 THEN "凑活活着"  ELSE "活着干嘛" END  "瞎说" FROM test.emp 

在这里插入图片描述

加解密函数

比如在数据库中放的数据,比如用户名和密码,如果用明文的 话,很多的时候就会导致数据安全问题,比如别人拷贝了某网站的数据库,就可以登录很多人的账户了。 不过说实话啊,一般加密直接会在插入数据库之前就进行了,而不是通过mysq的函数进行加密。

现在看有什么常用的函数:

函数作用
PASSWORD(str)返回字符串的str的加密后数据,一般为长度41的字符串,加密不可逆,常用于用户的密码加密。版本8.0后被弃用了。所以不要在8.0版本中使用会报错。
MD5(str)返回字符串str的md5加密后的数据,若参数为NULL 返回的也是NULL
SHA(str)从原明文密码str计算并返回加密后的密码字符串,当参数为NULL时,返回NULL,这个加密算法比MD5更安全
ENCODE(val,password)返回一个用password作为密码加密val后的值
DECODE(val,password)返回一个用password作为密码解密val后的值

还是下面进行演示:

SELECT PASSWORD(1) FROM DUAL; 

在这里插入图片描述

如果在8.0中使用上面的sql语言会报错:

在这里插入图片描述

SELECT MD5(1),SHA(1) FROM DUAL; 

在这里插入图片描述

无论时MD5加密还是SHA加密都是不可逆加密,其无法还原为原来的具体值。对于这个两个如果进行查询的话,只能通过加密后的值进行匹配。

SELECT ENCODE('1122','123'),DECODE(',�?P','123') FROM DUAL;

在这里插入图片描述

可以看出ENCODE和DECODE是一对加解密的方法。

msyql信息函数

这个就是查看一些mysql的信息函数,

函数作用
VERSION()返回当前的MYSQL的版本号
CONNECTION_ID()返回当前的MYSQL服务器的连接数
DATABASE(),SCHEMA()返回MYSQL命令的当前所在的数据库
USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER()返回连接MYSQL的用户明,返回其格式为:主机@用户名
CHARSET(val)返回val自变量的字符集
COLLATION(val)返回vla的比较规则

这些还是直接演示:

SELECT VERSION(),CONNECTION_ID(),DATABASE(),SCHEMA() FROM DUAL;

在这里插入图片描述

SELECT USER(),CURRENT_USER(),SYSTEM_USER(),SESSION_USER() FROM DUAL;

在这里插入图片描述

SELECT CHARSET('dfdd'),COLLATION("dddd") FROM DUAL;

在这里插入图片描述

其它的一些函数

MYSQL中有些函数,无法对其进行具体的分类,但这些函数有在开发和运维中也是比较常用的。

函数作用
FORMAT(val,n)返回数字val进行格式化后的结果数据,n表示四舍五入后保留的小数点位数
CONV(val,from,to)将val的值进行不同禁止之间的转换
INET_ATOA(ipvalue)将以点分隔 的IP地址转换为一个数字
INET_NTOA(value)将数字形式的ip转化为以点分隔的IP地址
BENCHMARK(n,expr)将表示expr重复执行的n次,用于测试MYSQL处理expr表达式所耗费的时间
CONVERT(val USING char_code)将val所使用的字符编码修改为char_code

现在开始演示:

SELECT FORMAT(1.12345,3),FORMAT(1234.567,0),FORMAT(1234.567,-1)   FROM DUAL;
-- FORMAT(val,n) 中n如果小于0 其值保留就是正数 

在这里插入图片描述

SELECT CONV(13,10,8),CONV(11111,2,10),CONV(NULL,10,2) FROM  DUAL;

在这里插入图片描述

SELECT  INET_ATON('192.168.1.1'),INET_NTOA(3232235777)   FROM  DUAL;

在这里插入图片描述

SELECT BENCHMARK(10000000,FORMAT(123.456,1)) FROM DUAL;
-- 因为某些函数执行的时候速度很快,无法查看时间,可以将其次数增加,然后反算执行一次的时间

在这里插入图片描述

SELECT CHARSET('abcd'),CHARSET(CONVERT("abcd" USING 'utf8mb4'))  FROM DUAL;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值