SQLyog基本操作(七)-MySQL常用函数、聚合函数、MD5加密

5 MySQL函数

官网:查看MySQL技术文档

5.1 常用函数

 -- 数学函数
 SELECT ABS(-1) -- 绝对值
 SELECT CEILING(1.1)  -- 向上取整
 SELECT FLOOR(1.1) -- 向下取整
 SELECT RAND() -- 产生0~1之间的随机小数
 SELECT SIGN(0) -- 判断一个数的符号:0返回0
 SELECT SIGN(10) -- 判断一个数的符号:正数返回1
 SELECT SIGN(-10) -- 判断一个数的符号:负数返回-1
 
 -- 字符串函数
 SELECT CHAR_LENGTH('字符串函数') -- 获取字符串长度
 SELECT CONCAT('字符串','函','数','拼接') -- 进行字符串拼接
 SELECT INSERT('hello world!',6,4,',你好!') -- 插入,从某个位置开始插入某个长度的字符串,索引下标位置从1开始
 SELECT LOWER('Hello') -- 全部转小写字母
 SELECT UPPER('Hello') -- 全部转大写字母
 SELECT INSTR('Hello','l') -- 返回第一次出现的该子串的索引下标,索引下标位置从1开始
 SELECT REPLACE('*1*2*3*','*','加油') -- 替换出现的指定字符串内容,前面为待替换的内容,后面为要替换的内容
 SELECT SUBSTR('12345654321',4) -- 从某个位置开始截取内容直到末尾,索引下标位置从1开始
 SELECT SUBSTR('12345654321',4,5) -- 从某个位置开始截取指定长度的子串内容,索引下标位置从1开始
 SELECT REVERSE('你是猪') -- 反转字符串
 -- 从student表中查询姓名为郭%的学生的全部信息
 SELECT * FROM `student` WHERE `StudentName` LIKE '郭%'
 -- 从student表中查找姓名为郭%的学生,将其姓氏“郭”替换为“李”
 SELECT REPLACE(`StudentName`,'郭','李') FROM `student`
 WHERE `StudentName` LIKE '郭%'
 
 -- 查询时间和日期函数
 SELECT CURRENT_DATE -- 获取当前日期 2021-06-30
 SELECT CURDATE() -- 同上
 SELECT NOW() -- 获取当前时间 2021-06-30 16:16:16
 SELECT LOCALTIME() -- 获取本地时间 2021-06-30 16:16:16
SELECT LOCALTIME -- 同上
 SELECT SYSDATE() -- 获取系统时间 2021-06-30 16:16:16
 SELECT YEAR(NOW()) -- 获取当前年份 2021
 SELECT MONTH(NOW()) -- 获取当前月份 6
 SELECT DAY(NOW()) -- 获取当前天数 30
 SELECT HOUR(NOW()) -- 获取当前小时 16
 SELECT MINUTE(NOW()) -- 获取当前分钟 16
 SELECT SECOND(NOW()) -- 获取当前秒钟 16
 
 -- 查询系统
 SELECT SYSTEM_USER() -- 获取系统作者 root@localhost
 SELECT USER() -- 同上
 SELECT VERSION() -- 获取版本号 5.7.19

5.2 聚合函数(常用)

 -- 统计表中的数据(想查询一个表中有多少个记录,就使用这个COUNT())
 SELECT COUNT(`StudentName`) FROM `student`; -- COUNT(字段):会忽略所有的NULL值
 -- 下面两个:本质都是计算行数
 SELECT COUNT(*) FROM `student`; -- COUNT(*):不会忽略所有的NULL值
 SELECT COUNT(1) FROM `student`; -- COUNT(1):不会忽略所有的NULL值
 
 -- 数学计算函数
 SELECT SUM(`StudentResult`) AS '总分' FROM `result`
 SELECT AVG(`StudentResult`) AS '平均分' FROM `result`
 SELECT MAX(`StudentResult`) AS '最高分' FROM `result`
 SELECT MIN(`StudentResult`) AS '最低分' FROM `result`
 
 -- 查询不同课程的平均分、最高分、最低分,平均分大于80的记录
 -- 核心:根据不同课程进行分组
 SELECT `SubjectName`,AVG(`StudentResult`) AS '平均分',MAX(`StudentResult`) AS '最高分',MIN(`StudentResult`) AS '最低分'
 FROM `result` r
 INNER JOIN `subject` sub
 ON r.`SubjectNo`=sub.`SubjectNo`
 GROUP BY r.`SubjectNo` -- 通过什么字段来查询
 HAVING '平均分'>80

5.3 数据库级别的MD5加密

        MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由MD4、MD3、MD2改进而来,主要增强算法复杂度和不可逆性。MD5算法因其普遍、稳定、快速的特点,仍广泛应用于普通数据的加密保护领域。

       MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。

 -- 创建testmd5表
 CREATE TABLE `testmd5`(
   `id` INT(4) NOT NULL,
   `name` VARCHAR(20) NOT NULL,
   `pwd` VARCHAR(50) NOT NULL,
   PRIMARY KEY(`id`)
 )ENGINE=INNODB DEFAULT CHARSET=utf8
 
 -- 明文密码
 INSERT INTO `testmd5` VALUES
 (1,'zhangsan','111111'),
 (2,'lisi','222222'),
 (3,'wangwu','333333')
 
 -- 对id=1的密码进行加密
 UPDATE `testmd5` SET `pwd`=MD5(`pwd`) WHERE `id`=1
 -- 对全部密码进行加密
 UPDATE `testmd5` SET `pwd`=MD5(`pwd`)
 
 -- 应该在插入数据的时候对密码进行加密,MD5()本身是个函数
 INSERT INTO `testmd5` VALUES(4,'zhaoliu',MD5('444444'))
 
 -- 如何校验:将用户传递进来的密码,进行MD5加密,然后对比加密后的值
 SELECT * FROM `testmd5` WHERE `name`='zhaoliu' AND `pwd`=MD5('444444')
 
posted @ 2021-06-23 23:47  Coder_Cui  阅读(570)  评论(0编辑  收藏  举报