Mysql学习笔记(九) ---- Mysql函数

前言

Mysql的函数很是多,它能够进行数学运算,字符串运算等等。因为数量较多,咱们今天调一部分出来与你们分享。
关于函数的完整官方文档能够参考:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.htmlhtml

在这里插入图片描述

1. 经常使用函数

这个标题其实有点误导人,说它经常使用吗,其实使用频率并不高,更应该叫作基础函数。mysql

数学运算web

SELECT ABS(-8)  -- 绝对值
SELECT CEILING(9.4)  -- 向上取整
SELECT FLOOR(9.4) -- 向下去整
SELECT RAND()    -- 返回一个0~1之间的随机数
SELECT SIGN(-10) -- 判断一个数的符号 0返回0;负数返回-1;正数返回1 

字符串函数算法

SELECT CHAR_LENGTH('即便再小的帆也能远航')    -- 字符串长度
SELECT CONCAT('我','爱','大家') -- 拼接字符串
SELECT INSERT('我爱你',1,2,'超级喜欢') -- 从某个位置开始替换某个长度
SELECT LOWER('Stephen_Gs') -- 小写字母
SELECT UPPER('Stephen_Gs') -- 大写字母
SELECT INSTR('Stephen_Gs','p') -- 返回第一个出现的字符串索引
SELECT REPLACE('狂神说坚持就能成功','坚持','努力') -- 替换出现的字符串
SELECT SUBSTR('狂神说坚持就能成功',4,6) -- 返回指定的子字符串(源字符串,截取的位置,截取的长度)
SELECT REVERSE('清晨我上马')  -- 反转

-- 应用实例
-- 查询姓狂的同窗,并改为系
SELECT REPLACE(`name`,'狂','系') AS `name` FROM student
WHERE `name` LIKE '狂%'

时间和日期函数(应用较多)sql

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 SYSTEM_USER()    -- 获取系统用户
SELECT USER()			-- 获取用户
SELECT VERSION()        -- 获取版本

2. 聚合函数(经常使用)

聚合函数是咱们平时开发中最常使用的mysql函数
在这里插入图片描述
咱们如今有一个学生表
在这里插入图片描述
咱们经过count()的三种形式来获取表中的记录数svg

SELECT COUNT(`gradeid`) FROM student -- Count(字段),会忽略null值
SELECT COUNT(*) FROM student -- count(*),不会忽略null值,计算行数
SELECT COUNT(1) FROM student -- count(1),不会忽略null值,计算行数

1的结果为4,2和3的结果为5(对于count(1) 和 count(*) 的区别百度上有不少的解释,这里就再也不强调)函数

咱们还能够经过聚合函数算出分数的相关结果网站

SELECT SUM(`score`) AS 总和 FROM student
SELECT AVG(`score`) AS 平均分 FROM student
SELECT MAX(`score`) AS 最高分 FROM student
SELECT MIN(`score`) AS 最低分 FROM student

3. 数据库级别的MD5加密 (扩展)

什么是MD5?
主要是加强算法的复杂性和不可逆性。MD5虽然不可逆,可是具体值的md5倒是同样的。
对于MD5破解网站的原理,实际上是背后有一个字典。咱们查的是MD5加密后的值,它返回的是加密前的值(不过只能破解一些简单的密码。如:123456这种)加密

下面咱们模拟生成一个MD5加密的表

-- 建立 testmd5的表
CREATE TABLE `testmd5`(
   `id` INT(4) NOT NULL AUTO_INCREMENT,
   `name` VARCHAR(20) NOT NULL,
   `pwd` VARCHAR(50),
   PRIMARY KEY(`id`)
)ENGINE = INNODB DEFAULT CHARSET = utf八、
-- 插入明文的密码
-- 明文密码
INSERT INTO testmd5(`name`,`pwd`) VALUES
('zs','123456'),
('ls','abcdef'),
('ww','12309aa')

在这里插入图片描述

-- 加密
UPDATE testmd5 SET pwd=MD5(pwd)  -- 加密所有的密码

在这里插入图片描述
1.咱们能够看到原来的明文密码变成了一串奇怪的数字+字母;
2.咱们还可直接在插入时就对密码进行加密

INSERT INTO testmd5(`name`,`pwd`) VALUES
('小明',MD5('123456'))

在这里插入图片描述
3.观察上表中小明和zs的密码能够发现,他们两个的密文实际上是相等的,由于他们的明文密码都是123456。
4. 那咱们平时开发中又如何校验相关的数据呢,通常是将用户传进来的密码进行md5加密后,而后比对加密后的值。

SELECT * FROM testmd5 WHERE `name`='小明' AND pwd=MD5('123456')

查询的结果为:
在这里插入图片描述