目录
一、数据库函数
1、数学函数
2、聚合函数
3、字符串函数
4、 日期时间函数
二、存储过程
1、概述
2、简介
3、存储过程的优点:
4、语法
创建存储过程(不带参数)
查看存储过程
创建存储过程(带参数)
修改存储过程
删除存储过程
总结
数据库内存储的记录,经常要进行一系列的算术操作,所以 MySQL 支持很多数学函数
数学函数 | 描述 |
abs(x) | 返回 x 的绝对值 |
rand() | 返回 0 到 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…) | 返回集合中最小的值 |
MySQL 数据库函数中专门有一组函数是特意为库内记录求和或者对表中的数据进行集中概括而设计的,这些函数被称作聚合函数
聚合函数 | 描述 |
avg() | 返回指定列的平均值 |
count() | 返回指定列中非 NULL 值的个数 |
min() | 返回指定列的最小值 |
max() | 返回指定列的最大值 |
sum(x) | 返回指定列的所有值之和 |
字符串函数 | 描述 |
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 反转 |
字符串函数 | 描述 |
curdate() | 返回当前时间的年月日 |
curtime() | 返回当前时间的时分秒 |
now() | 返回当前时间的日期和时间 |
month(x) | 返回日期 x 中的月份值 |
week(x) | 返回日期 x 是年度第几个星期 |
hour(x) | 返回 x 中的小时值 |
minute(x) | 返回 x 中的分钟值 |
second(x) | 返回 x 中的秒钟值 |
dayofweek(x) | 返回 x 是星期几,1 星期日,2 星期一 |
dayofmonth(x) | 计算日期 x 是本月的第几天 |
dayofyear(x) | 计算日期 x 是本年的第几天 |
前面学习的 MySQL 相关知识都是针对一个表或几个表的单条 SQL 语句,使用这样的SQL 语句虽然可以完成用户的需求,但在实际的数据库应用中,有些数据库操作可能会非常复杂,可能会需要多条 SQL 语句一起去处理才能够完成,这时候就可以使用存储过程, 轻松而高效的去完成这个需求,有点类似shell脚本里的函数
存储过程是一组为了完成特定功能的SQL语句集合
存储过程这个功能是从5.0版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。操作数据库的传统 SQL 语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高
执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
SQL语句加上控制语句的集合,灵活性高
在服务器端存储,客户端调用时,降低网络负载
可多次重复被调用,可随时修改,不影响客户端调用
可完成所有的数据库操作,也可控制数据库的信息访问权限
CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体> [过程参数[,…] ] 格式 <过程名>:尽量避免与内置的函数或字段重名 <过程体>:语句 [ IN | OUT | INOUT ] <参数名><类型>
mysql> delimiter $$ mysql> create procedure l() -> begin -> create table ly(id int(10),name char(10),score varchar(20)); -> insert into ly values (1,'liu',13); -> select * from ly; -> end $$ Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; I 存储过程的主体都分,被称为过程体 II 以BEGIN开始,以END结束,若只有一条sQL语句,则可以省略BEGIN-END III 以DELIMITER开始和结束 mysgl>DEL工M工TER $$ $$是用户自定义的结束符 省略存储过程其他步骤 mysql>DELIMITER ; 分号前有空格
格式:SHOW CREATE PROCEDURE [数据库.]存储过程名; #查看存储过程 SHOW PROCEDURE STATUS
此实例中我没有DELIMITER ;做结束语
ALTER PROCEDURE <过程名>[<特征>... ] ALTER PROCEDURE GetRole MODIFIES SQL DATA SQL SECURITY INVOKER; MODIFIES SQLDATA:表明子程序包含写数据的语句 SECURITY:安全等级 invoker:当定义为INVOKER时,只要执行者有执行权限,就可以成功执行。
存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。
DROP PROCEDURE IF EXISTS 存储名;
数据库函数主要有数学函数,聚合函数,字符串函数,日期函数
数学函数主要就是一些基础abs绝对值,rand零到1随机数,mod余数,power次方,round近整数
聚合函数主要是AVG平均数,count统计,min最小值,max最大值,sum求和
字符串主要是length长度,trim去空格,concat拼接,upper变大写,lower变小写,left左侧前几个字符,right右侧前几个字符,repeat重复字符次数,space返回空格,replace替代字符,strcmp比较字符,substring截图字符串中从某位置的几个数,reverse字符翻转
日期函数主要是curdate返回年月日,curtime返回时分秒,now返回时间,month返回月份,week返回周,hour返回小时,minute返回分,second返回秒,dayofweek返回星期几,dayofmonth返回月第几天,dayofyear返回年第几天
存储过程像shell脚本里的函数一样,通过调用数据存储过程,来进行完成操作,生成的二进制在缓冲区,提高执行效率,是一些控制语句集合,灵活性高,较低了网络负载,可以多次调用,可以完成数据库操作,也可以控制访问权限