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算法依旧流行的主要原因
  • 对应函数——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 |
    +----+----------+----------------------------------+
    */
    
posted @ 2020-10-22 15:57  PrimaBruceXu  阅读(61)  评论(0编辑  收藏  举报