MySQL-05-常用函数
5.1 常用函数
-
MySQL中提供许多可供操作的函数,详见https://dev.mysql.com/doc/refman/8.0/en/sql-function-reference.html
-
这部分了解即可,需要用到的时候查手册即可,没必要一个一个全部记住
-
数学函数
SELECT ABS(-8); /*绝对值*/ SELECT CEILING(9.4); /*向上取整*/ SELECT FLOOR(9.4); /*向下取整*/ SELECT RAND(); /*随机数,返回一个0-1之间的随机数*/ SELECT SIGN(0); /*符号函数: 负数返回-1,正数返回1,0返回0*/
-
字符串函数
SELECT CHAR_LENGTH('狂神说坚持就能成功'); /*返回字符串包含的字符数*/ SELECT CONCAT('我','爱','程序'); /*合并字符串,参数可以有多个*/ SELECT INSERT('我爱编程helloworld',1,2,'超级热爱'); /*替换字符串,从某个位置开始替换某个长度*/ SELECT LOWER('KuangShen'); /*小写*/ SELECT UPPER('KuangShen'); /*大写*/ SELECT LEFT('hello,world',5); /*从左边截取*/ SELECT RIGHT('hello,world',5); /*从右边截取*/ SELECT REPLACE('狂神说坚持就能成功','坚持','努力'); /*替换字符串*/ SELECT SUBSTR('狂神说坚持就能成功',4,6); /*截取字符串,开始和长度*/ SELECT REVERSE('狂神说坚持就能成功'); /*反转
-
日期时间函数
SELECT CURRENT_DATE(); /*获取当前日期*/ SELECT CURDATE(); /*获取当前日期*/ SELECT NOW(); /*获取当前日期和时间*/ SELECT LOCALTIME(); /*获取当前日期和时间*/ SELECT SYSDATE(); /*获取当前日期和时间*/ -- 获取年月日,时分秒 SELECT YEAR(NOW()); SELECT MONTH(NOW()); SELECT DAY(NOW()); SELECT HOUR(NOW()); SELECT MINUTE(NOW()); SELECT SECOND(NOW());
-
系统信息函数
SELECT VERSION(); /*版本*/ SELECT USER(); /*用户*/
5.2聚合函数
-
常用聚合函数
函数名 功能 COUNT() 计数 SUM() 求和 AVG() 平均值 MAX() 最大值 MIN() 最小值 -
示例
-- count SELECT COUNT(studentname) FROM student; -- count(列名)会忽略NULL值 SELECT COUNT(*) FROM student; -- count(*)和count(1)本质上都是统计行数,不会忽略NULL值,没有具体区别 SELECT COUNT(1) FROM student; /* +--------------------+ | COUNT(studentname) | +--------------------+ | 20 | +--------------------+ */ -- sum SELECT SUM(StudentResult) AS 总和 FROM result; /* +-------+ | 总和 | +-------+ | 23159 | +-------+ */ -- avg SELECT AVG(StudentResult) AS 平均分 FROM result; /* +---------+ | 平均分 | +---------+ | 80.1349 | +---------+ */ -- max SELECT MAX(StudentResult) AS 最高分 FROM result; /* +--------+ | 最高分 | +--------+ | 100 | +--------+ */ -- min SELECT MIN(StudentResult) AS 最低分 FROM result; /* +--------+ | 最低分 | +--------+ | 32 | +--------+ */
5.3 MD5加密
-
什么是MD5?
- MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1992年公开,用以取代MD4算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如SHA-2。2004年,证实MD5算法无法防止碰撞(collision),因此不适用于安全性认证,如SSL公开密钥认证或是数字签名等用途。
-
为什么MD5已被破解,但仍继续使用?
- 这里首先要说明的是,这里的破解并不是说已知MD5,可以反推出文件内容。而是已知MD5,我们可以构造一个新的文件,使得两者MD5依旧相同。这里的破解指的是无法防止碰撞
- 详细解释如下:
- 已知文件A的内容为:今晚5点碰面,MD5为:123456。按照现有的技术,完全可以构造出一个文件B,使得文件B的MD5也为123456。但是这份文件B的内容可能就没有可读性了,也许是一段乱码,比如说
sda*&hj*2%7123sd*))%
- 也就是说,想要制作一份文件B,内容为:今晚6点碰面,同时满足MD5也为123456的情况,几乎不存在
- 所以说,MD5的主要功能——防止篡改,依旧能够实现。因为篡改之后的文件没有可读性,不影响结果。因为没有可读性的话就没有实用价值了。这也就是MD5算法依旧流行的主要原因
- 已知文件A的内容为:今晚5点碰面,MD5为:123456。按照现有的技术,完全可以构造出一个文件B,使得文件B的MD5也为123456。但是这份文件B的内容可能就没有可读性了,也许是一段乱码,比如说
-
对应函数——MD5()
-
示例
CREATE TABLE `md5` ( `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 md5 VALUES(1,'brucexu1',md5('123456')); -- 查询是否匹配的方式 SELECT * FROM md5 WHERE `name`='brucexu1' AND pwd=MD5('123456'); /* +----+----------+----------------------------------+ | id | name | pwd | +----+----------+----------------------------------+ | 1 | brucexu1 | e10adc3949ba59abbe56e057f20f883e | +----+----------+----------------------------------+ */