前言

Mysql的函数非常多,它可以进行数学运算,字符串运算等等。由于数量较多,我们今天调一部分出来与大家分享。
关于函数的完整官方文档可以参考:https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.html

mysql COALESCE函数的作用_当前日期

1. 常用函数

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

数学运算

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 '狂%'

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

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函数

mysql COALESCE函数的作用_字符串_02


我们现在有一个学生表

mysql COALESCE函数的作用_mysql COALESCE函数的作用_03


我们通过count()的三种形式来获取表中的记录数

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 = utf8、
-- 插入明文的密码
-- 明文密码
INSERT INTO testmd5(`name`,`pwd`) VALUES
('zs','123456'),
('ls','abcdef'),
('ww','12309aa')

mysql COALESCE函数的作用_字符串_04

-- 加密
UPDATE testmd5 SET pwd=MD5(pwd)  -- 加密全部的密码

mysql COALESCE函数的作用_mysql COALESCE函数的作用_05


1.我们可以看到原来的明文密码变成了一串奇怪的数字+字母;

2.我们还可直接在插入时就对密码进行加密

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

mysql COALESCE函数的作用_mysql COALESCE函数的作用_06


3.观察上表中小明和zs的密码可以发现,他们两个的密文其实是相等的,因为他们的明文密码都是123456。

4. 那我们平时开发中又如何校验相关的数据呢,一般是将用户传进来的密码进行md5加密后,然后比对加密后的值。

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

查询的结果为:

mysql COALESCE函数的作用_字符串_07