MySQL函数

常用函数

官方文档 : https://dev.mysql.com/doc/refman/5.7/en/func-op-summary-ref.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('dgDSssssa'); /*小写*/
SELECT UPPER('aassfdf'); /*大写*/
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();   /*用户*/

聚合函数

函数名称 描述
COUNT() 返回满足Select条件的记录总和数,如 select count(*) 【不建议使用 *,效率低】
SUM() 返回数字字段或表达式列作统计,返回一列的总和。
AVG() 通常为数值字段或表达列作统计,返回一列的平均值
MAX() 可以为数值字段,字符字段或表达式列作统计,返回最大的值。
MIN() 可以为数值字段,字符字段或表达式列作统计,返回最小的值。
/*COUNT:非空的*/
SELECT COUNT(studentname) FROM student;
SELECT COUNT(*) FROM student;
SELECT COUNT(1) FROM student;  /*推荐*/

从含义上讲,count(1)count(*) 都表示对全部数据行的查询。

  • count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null的记录。
  • count(*) 包括了所有的列,相当于行数,在统计结果的时候,包含字段为null 的记录
  • count(1) 用1代表代码行,在统计结果的时候,包含字段为null 的记录 。

很多人认为count(1)执行的效率会比count(*)高,原因是count(*)会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。

  • 在表没有主键时,count(1)比count(*)快
  • 有主键时,主键作为计算条件,count(主键)效率最高;
  • 若表格只有一个字段,则count(*)效率较高。

MD5 加密

MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。将数据(如汉字)运算为另一固定长度值,是杂凑算法的基础原理,MD5的前身有MD2、MD3和MD4。

实现数据加密

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,'xiao','123456'),(2,'ming','456789')

有如上数据,现在我们对其所有密码加密

update testmd5 set pwd = md5(pwd);

如果单独对某个用户的密码进行加密

INSERT INTO testmd5 VALUES(3,'hong','123456')
update testmd5 set pwd = md5(pwd) where name = 'hong';

也可以在插入数据的时候直接加密

INSERT INTO testmd5 VALUES(4,'gang',md5('123456'));

如果要做登录判断,可以直接对加密后的密码进行比对即可。

SELECT * FROM testmd5 WHERE `name`='gang' AND pwd=MD5('123456');

小结

-- 数值函数
abs(x)       -- 绝对值 abs(-10.9) = 10
format(x, d)   -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46
ceil(x)       -- 向上取整 ceil(10.1) = 11
floor(x)     -- 向下取整 floor (10.1) = 10
round(x)     -- 四舍五入去整
mod(m, n)     -- m%n m mod n 求余 10%3=1
pi()       -- 获得圆周率
pow(m, n)     -- m^n
sqrt(x)       -- 算术平方根
rand()       -- 随机数
truncate(x, d)   -- 截取d位小数 -- 时间日期函数
now(), current_timestamp();   -- 当前日期时间
current_date();           -- 当前日期
current_time();           -- 当前时间
date('yyyy-mm-dd hh:ii:ss');   -- 获取日期部分
time('yyyy-mm-dd hh:ii:ss');   -- 获取时间部分
date_format('yyyy-mm-dd hh:ii:ss', '%d %y %a %d %m %b %j');   -- 格式化时间
unix_timestamp();         -- 获得unix时间戳
from_unixtime();         -- 从时间戳获得时间 -- 字符串函数
length(string)       -- string长度,字节
char_length(string)     -- string的字符个数
substring(str, position [,length])     -- 从str的position开始,取length个字符
replace(str ,search_str ,replace_str)   -- 在str中用replace_str替换search_str
instr(string ,substring)   -- 返回substring首次在string中出现的位置
concat(string [,...])   -- 连接字串
charset(str)       -- 返回字串字符集
lcase(string)       -- 转换成小写
left(string, length)   -- 从string2中的左边起取length个字符
load_file(file_name)   -- 从文件读取内容
locate(substring, string [,start_position])   -- 同instr,但可指定开始位置
lpad(string, length, pad)   -- 重复用pad加在string开头,直到字串长度为length
ltrim(string)       -- 去除前端空格
repeat(string, count)   -- 重复count次
rpad(string, length, pad)   --在str后用pad补充,直到长度为length
rtrim(string)       -- 去除后端空格
strcmp(string1 ,string2)   -- 逐字符比较两字串大小 -- 聚合函数
count()
sum();
max();
min();
avg();
group_concat() -- 其他常用函数
md5();
default();

MySQL学习05(MySQL函数)的更多相关文章

  1. MySQL学习——操作自定义函数

    MySQL学习——操作自定义函数 摘要:本文主要学习了使用DDL语句操作自定义函数的方法. 了解自定义函数 是什么 自定义函数是一种与存储过程十分相似的过程式数据库对象.它与存储过程一样,都是由SQL ...

  2. MySQL学习笔记-MySQL体系结构总览

    MySQL体系结构总览 不管是用哪种数据库,了解数据库的体系结构都是极为重要的.MySQL体系结构主要由数据库和数据库实例构成. 数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件 ...

  3. MySql学习笔记——存储函数

    在学习完存储过程后,今天主要回顾一下mysql中的存储函数的知识. 函数与存储过程的区别 首先,存储函数也是过程式对象之一,与存储过程相似.它们都是由SQL和过程式语句组成的代码片断,并且可以从应用程 ...

  4. 我的MYSQL学习心得 mysql日志

    这一篇<我的MYSQL学习心得(十五)>将会讲解MYSQL的日志 MYSQL里的日志主要分为4类,使用这些日志文件,可以查看MYSQL内部发生的事情. 分别是 1.错误日志:记录mysql ...

  5. 我的MYSQL学习心得 mysql的权限管理

    这一篇<我的MYSQL学习心得(十三)>将会讲解MYSQL的用户管理 在mysql数据库中,有mysql_install_db脚本初始化权限表,存储权限的表有: 1.user表 2.db表 ...

  6. MySQL学习(4)---MySQL索引

    ps:没有特殊说明,此随笔中默认采用innoDB存储引擎中的索引,且索引都是指B+树(多路平衡搜索树)结构组织的索引.其中聚集索引.复合索引.前缀索引.唯一索引默认都是使用B+树,统称为索引. 索引概 ...

  7. MySQL学习笔记——MySQL启动过程(一)

    首先去官网或者github下载MySQL5.7的源码. 官网地址:https://dev.mysql.com/downloads/mysql/ github地址:https://github.com/ ...

  8. MySQL学习(3)---MySQL常用命令

    ps:此随笔基于mysql 5.7.*版本. 准备 net start mysql 启动MySQL服务 net stop mysql 关闭MySQL服务 mysql [-h<IP地址>] ...

  9. MySQL学习(1)---MySQL概述

    什么是数据库 概述 数据库(Database)是长期存储在计算机内有组织.大量.共享的数据集合.它可以供各种用户共享,具有最小冗余度和较高的数据独立性.数据库管理系统DBMS(Database Man ...

  10. MySQL学习11 - MySQL创建用户和授权

    权限管理 权限管理 我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作.包括select.update.delete.update.grant等操作.那么一般情况在公司之后DBA工程师 ...

随机推荐

  1. Spring:在web.xml正确加载spring配置文件的方式

    web.xml加载spring配置文件的方式主要依据该配置文件的名称和存放的位置不同来区别,目前主要有两种方式. 1. 如果spring配置文件的名称为applicationContext.xml,并 ...

  2. linux--------find命令之xargs

    p.p1 { margin: 0; font: 18px "Hannotate SC"; color: rgba(4, 51, 255, 1); -webkit-text-stro ...

  3. 微信小程序支付 后台处理逻辑 (转)

    <?phpnamespace app\parent\controller; use think\Request; class Wxpay{    function wechat(){ //微信配 ...

  4. 整理C#获取日期显示格式

    C#获取当前日期的几种显示格式 有时候需要用一些不常用的日期格式时,总是要去网上查找,很多都是复制粘贴,还不完整.就整理一下. DatetimeTextBox.Text += DateTime.Now ...

  5. Java开源协同办公项目:数据中心,自定义查询语句使用教程

    O2OA提供的数据管理中心,可以让用户通过配置的形式完成对数据的汇总,统计和数据分组展现,查询和搜索数据形成列表数据展现.也支持用户配置独立的数据表来适应特殊的业务的数据存储需求.本文主要介绍如何在O ...

  6. Java基础00-内部类23

    1. 内部类 内部类 1.1 内部类概述 代码示例: 1.2 成员内部类 代码示例: 创建一个成员内部类:定义时没有小括号是因为类是没有形参的.在类的成员位置,就是成员内部类了 创建测试类:这里发现不 ...

  7. [刘阳Java]_为什么要前后端分离

    前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多 ...

  8. [刘阳Java]_BeanNameViewResolver视图解析器_第8讲

    BeanNameViewResolver:这个视图解析器跟XmlViewResolver有点类似,也是通过把返回的逻辑视图名称去匹配定义好的视图bean对象.它要求视图bean对象都定义在Spring ...

  9. vite插件-自动生成vue组件文档

    特点 支持热更新 快速启动,依赖于 vite,无需另起服务 自动生成组件导航 ui 采用了vant-ui的样式 核心方法覆盖率达到了 92.86% 使用 yarn add vite-plugin-vu ...

  10. Requests方法 -- Blog流程类进行关联

    1.接口封装关联 1.有些接口经常会用到比如登录的接口,这时候我们可以每个接口都封装成一个方法,如:登录.保存草稿.发帖.删帖,这四个接口就可以写成四个方法2.接口封装好了后,后面我们写用例那就直接调 ...