MySQL——高阶语句(下)

  • 一、数据库函数
    • 1、数学函数
    • 2、聚合函数
    • 3、字符串函数
    • 4、日期时间函数
  • 二、存储过程
    • 1、概述
    • 2、简介
    • 3、优点
    • 4、创建存储过程
      • 调用存储过程
      • 带参数的存储过程
      • 查看存储过程
      • 修改存储过程
      • 删除存储过程

一、数据库函数

MySQL数据库函数提供了能够实现各种功能的方法,使我们在查询记录时能够更高效的输出。MySQL内建了很多函数,常用的包括数学函数、聚合函数、字符串函数和日期时间函数。

1、数学函数

数据库内存储的记录,经常要进行一系列的算术操作,所以 MySQ支持很多数学函数。常用的数学函数如表所示

abs (x)               返回x的绝对值
rand ()               返回o到1的随机数
mod (x,y)             返回x除以y以后的余数
power (x,y)           返回x的y次方
round (x)             返回离x最近的整数
round (x,y)           保留x的y位小数四舍五入后的值
sqrt (x)              返回x的平方根
truncate (x, y)       返回数字x截断为y位小数的值
ceil(x)               返回大于或等于x的最小整数
floor(x)              返回小于或等于x的最大整数
greatest (x1,x2...)   返回集合中最大的值
least (x1,x2...)      返回集合中最小的值SELECT abs(-2), rand(), mod(5,2), power(2,2), round(1.79);SELECT round(5.24379,4), truncate(2.569,2), ceil(4.2), floor(5.3), greatest(1,2,3,4.5) least(1.89,3,6.1,2.1);


2、聚合函数

数据库函数中专门有一组函数是特意为库内记录求和或者对表中的数据进行集中概括而设计的,这些函数被称作聚合函数

聚合函数          描述
avg ()           返回指定列的平均值
count ()         返回指定列中非NULL值的个数
min ()           返回指定列的最小值
max ()           返回指定列的最大值
sum (x)          返回指定列的所有值之和select avg(a_level) from test1;select count(a_id) from test1;select max(a_level) from test1;
select min(a_level) from test1;select sum(a_level) from test1;

3、字符串函数

length(x)        返回字符串 x 的长度
trim()          返回去除指定格式的值
concat(x,y)     将提供的参数 x 和 y 拼接成一个字符串
upper(x)        将字符串 x 的所有字母变成大写字母
lower(x)        将字符串 x 的所有字母变成小写字母
left(x,y)       返回字符串 x 的前 y 个字符
right(x,y)      返回字符串 x 的后 y 个字符
repeat(x,y)     将字符串 x 重复 y 次
space(x)        返回 x 个空格
replace(x,y,z)  将字符串 z 替代字符串 x 中的字符串 y
strcmp(x,y)     比较 x 和 y,返回的值可以为-1,0,1
substring(x,y,z)   获取从字符串 x 中的第 y 个位置开始长度为 z 的字符串
reverse(x)      将字符串 x 反转







4、日期时间函数

字符串函数         描述
curdate ()       返回当前时间的年月日
curtime ()       返回当前时间的时分秒
now ()           返回当前时间的日期和时间
month (x)        返回日期x中的月份值
week (x)         返回日期x是年度第几个星期
hour(x)          返回x中的小时值
minute(x)        返回x中的分钟值
second(x)        返回x中的秒钟值
dayofweek(x)     返回x是星期几,1 星期日,2星期一
replace(x,y,z)   将字符串 z替代字符串x中的字符串y
dayofmonth(x)    计算日期x是本月的第几天
dayofyear (x)    计算日期x是本年的第几天select curdate(); 返回当前年月日如2021-04-20
select curtime(); 返回当前时间
select now();
select month('2021-4-20'); 返回第几月
select hour(curtime());  返回当前的小时
select minute(curtime());  返回当前时间分钟
select second(curtime());  返回当前时间的秒
select dayofweek(curtime());  当前是星期几
select dayofyear(curtime());  当前是今年的第多少天

二、存储过程

1、概述

  • 前面学习的 MySQL 相关知识都是针对一个表或几个表的单条SQL 语句,使用这样的SQL语句虽然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条SQL语句一起去处理才能够完成,这时候就可以使用存储过程,轻松而高效的去完成这个需求,有点类似shell脚本里的函数

2、简介

  • MySQL数据库存储过程是一组为了完成特定功能的SQL语句的集合。存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用sQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统SQL语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。存储过程在数据库中创建并保存,它不仅仅是SQL语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。

3、优点

1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
2、SQL语句加上控制语句的集合,灵活性高
3、在服务器端存储,客户端调用时,降低网络负载
4、可多次重复被调用,可随时修改,不影响客户端调用
5、可完成所有的数据库操作,也可控制数据库的信息访问权限

4、创建存储过程

使用CREATE PROCEDURE语句创建存储过程(与Shell函数差不多,代码的复用)

格式:
DELIMITER $$                            #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE xxx()                  #创建存储过程,过程名为xxx,不带参数BEGIN                                  #过程体以关键字 BEGIN 开始sql语句;                             #过程体语句END $$                                   #过程体以关键字 END 结束
DELIMITER ;                             #将语句的结束符号恢复为分号例:
delimiter $$                          #定义结束符
create procedure cc()           #创建存储过程(过程名)begin                        #开启存储过程create table yy (id int(10),name char(10),score int(10));insert into yy values (1,'zhang',20);select * from yy;            #过程体end $$                       #结束存储过程
delimiter ;                    #将结束符还原PS:
存储过程的主体部分,被称为过程体
以BEGIN开始,以END结束,若只有一条sQL语句,则可以省略BEGIN-END
以DELIMITER开始和结束
mysql> DELIMITER $$            $$是用户自定义的结束符
省略存储过程其他步骤
mysql> DELIMITER ;             分号前有空格

调用存储过程

call cc

带参数的存储过程

IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
例:
delimiter $$
create procedure tt(in inname varchar(16))      begin                                       select * from test1 where a_name='aaaa';     end $$
delimiter ;
call tt('aaaa');

查看存储过程

show procedure status;
show create procedure 存储过程名称;

修改存储过程

ALTER PROCEDURE <过程名> [<特征>... ]
ALTER PROCEDURE tt MODIFIES SQL DATA SQL SECURITY INVOKE;
MODIFIES SQL DATA:表明子程序包含写数据的语句
SECURITY:安全等级
invoker:当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。

删除存储过程

DROP PROCEDURE IF EXISTS 过程名;   #所以可以使用if exists确定存在后删除,不存在则不执行删除。
例:
drop procedure if exists cc;

MySQL——高阶语句、存储过程(下)相关推荐

  1. Mysql数据库(九)——mysql高阶语句(下)

    Mysql数据库(九)--mysql高阶语句(下) 一.函数 1.数学函数 2.聚合函数 3.字符串函数 4.日期时间函数 二.存储过程 1.简介 2.优点 3.语法 ①.例 ②.参数分类 ③.带参数 ...

  2. MySQL——高阶语句(上)

    MySQL高阶语句(上) 一.MySQL高级语句 1.ORDER BY----按关键字排序 单字段排序 多字段排序 2.OR/AND----或/且 3.DISTINCT----查询不重复记录 4.GR ...

  3. Mysql数据库(七)——mysql高阶语句(上)

    Mysql数据库(七)--mysql高阶语句(上) 一.按关键字排序 1.单字段排序 2.多字段排序 二.或/且的运用 三.查询不重复记录 四.对结果进行分组 五.限制结果条目 六.设置别名 使用场景 ...

  4. MySQL——高阶语句(中)

    MySQL--高阶语句(中) 一.正则表达式 二.运算符 三.比较运算符 四.逻辑运算符 五.位运算符 六.连接查询 1.内连接 2.左连接 3.右连接 一.正则表达式 MySQL 正则表达式通常是在 ...

  5. Mysql数据库(八)——mysql高阶语句(中)

    Mysql数据库(八)--mysql高阶语句(中) 一.正则表达式(同shell脚本的正则表达式) 1.以"."代替任意一个字符 2.匹配前面字符多次 3.匹配前面字符至少一次 4 ...

  6. mysql高阶语句一

    高阶语句一 1.按关键字排序 (1)按一个字段排序: (2)多字段排序 2.区间判断及查询不重复记录 2.1 AND/OR --且/或 2.2.对结果进行分组统计 3.限制结果条目 4.设置别名(al ...

  7. 学习笔记:MySQL高阶知识体系(下)——索引、锁、日志、隔离级别与MVCC

    转载自https://www.ydlclass.com/doc21xnv/database/mysqladvance/mysqlAdvance2.html MySQL高阶知识体系(下) 6. 索引 6 ...

  8. MYSQL sql 高阶语句 (sequel)

    sql 高阶语句 一.空值(NULL) 和 无值('') 的区别 · 无值的长度为 0,不占用空间的:而 NULL 值的长度是 NULL,是占用空间的. · S NULL 或者 IS NOT NULL ...

  9. Hive建表高阶语句、Hive视图

    Hive建表高阶语句.Hive视图 Hive建表高阶语句 - CTAS and WITH 创建临时表 Hive视图(Views) 视图概述 应用场景 Hive视图操作 Hive侧视图(Lateral ...

最新文章

  1. 再见!Kafka决定弃用Zookeeper...
  2. 神策数据联合Ping++,推出电商、O2O 行业的 GMV 增长研讨
  3. c++计算eigen随笔(10)-数组、矩阵、向量(3)
  4. 网易云信携手小天才Z6手表,让安全“看得见”
  5. [js] 写一个方法,实时验证input输入的值是否满足金额如:3.56(最多只有两位小数且只能数字和小数点)的格式,其它特殊字符禁止输入
  6. rs232串口驱动_RS232与RS485在性能上有啥区别和联系?老电工总结分析,一目了然...
  7. Python RSA加密与解密 公钥和私钥 读写pem文件
  8. json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示
  9. memcached学习笔记1(windows 7 64bit 环境下安装memcached)
  10. 「知识点」JavaScript 中11个有趣的事实
  11. Windows下安装jenkins,关闭jenkins,修改jenkins端口号
  12. Asp.net对http request 处理的全过程!
  13. 用mysql做宠物商店项目_使用Java实现数据库编程 项目(宠物商店)
  14. Chrome 插件英雄榜
  15. pytorch转为onnx格式,以及加载模型的params和GFLOPs方法
  16. va_list 原理以及用法
  17. 看图说话!这个 AI 商品识别系统开源了!
  18. APS计划软件助纺织企业降低成本,提升效益
  19. 统计学中的P值与显著性的意义
  20. Excel表格导入数据库进行判断是否有相同的数据

热门文章

  1. 畅享音视频技术饕餮盛宴,就在LiveVideoStackCon 上海站
  2. 9家专利拥有者退出MPEG LA HEVC 华为加入HEVC Advance
  3. Go netpoller 网络模型之源码全面解析
  4. Golang 性能优化实战
  5. 编写可靠 bash 脚本的一些技巧
  6. 【Go API 开发实战 3】API 流程和代码结构
  7. 透过新硬件环境下的存储技术,看未来数据库系统崛起(附PPT)
  8. Linux 中如何安装卸载软件
  9. json中omitempty字段的使用
  10. linux centos 编译Lua5.2.0 静态库 动态库