MySQL存储过程与函数
函数
数学函数
abs(x):返回x的绝对值
rand():返回0到1的随机数(0-0.9999…,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…):返回集合中最小的值
聚合函数
1、对表中数据记录进行集中概括而设计的一类函数
2、常用的聚合函数(只会产生一个值)
avg(字段名) 返回指定字段的平均值
count(字段名) 返回指定字段中非NULL值的个数
min(字段名) 返回指定字段的最小值
max(字段名) 返回指定字段的最大值
sum(字段名) 返回指定字段的所有值之和
字符串函数
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个空格(结合concat使用)
replace(x,y,z):将字符串z替代字符串x中的字符串y
strcmp(x,y):比较x和y,返回的值可以为-1 <,0 =,1 >
substring(x,y,z):获取从字符串x中的第y个位置开始长度为z的字符串
格式:substring(完整字符串,起始位置,长度); #起始位置从1开始
reverse(x):将字符串x反转
日期时间函数
curdate():返回当前时间的年月日
curtime():返回当前时间的时分秒
now():返回当前时间的日期和时间
month(x):返回日期x中的月份值
hour(x):返回x中的小时值
minute(x):返回x中的分钟值
second(x):返回x中的秒钟值
dayofweek(x):返回x是星期几,1星期日,2星期一,3星期二…
dayofmonth(x):计算日期x是本月的第几天
dayofyear(x):计算日期x是本年的第几天
MySQL存储过程
存储过程简介
1、从 5.0 版本才开始支持
2、是一组为了完成特定功能的SQL语句集合(封装)
3、比传统SQL速度更快、执行效率更高
4、存储过程的优点
(1)执行一次后,会将生成的二进制代码驻留缓冲区(便于下次执行),提高执行效率
(2)SQL语句加上控制语句的集合,灵活性高
(3)在服务器端存储,客户端调用时,降低网络负载
(4)可多次重复被调用,可随时修改,不影响客户端调用
(5)可完成所有的数据库操作,也可控制数据库的信息访问权限
5、为什么要用存储过程?
(1)减轻网络负载;
(2)增加安全性
创建存储过程
1、使用create procedure语句创建存储过程
2、参数分为
输入参数:in
输出参数:out
输入/输出参数:inout
3、存储过程的主体部分,被称为过程体;以begin开始,以end$$结束
4、具体格式
delimiter $$
create procedure 存储过程名(in 参数名 参数类型)
begin
#定义变量
declare 变量名 变量类型
#变量赋值
set 变量名 = 值
sql 语句1;
sql 语句2;
...
end$$
delimiter ;(有空格)
举例:
mysql> delimiter $$
mysql> create procedure test ()
-> begin select * from test;
-> end $$
Query OK, 0 rows affected (0.00 sec)
mysql>
调用存储过程
call 存储过程名(实际参数);
举例:
mysql> delimiter ;
mysql> call test;
查询存储过程
show procedure status where db=‘数据库’;
修改存储过程
存储过程的修改分为特征的修改和业务内容的修改。
特征的修改语法结构如下:
alter procedure 存储过程名 [ <特征> … ]
删除存储过程
删除存储过程的语法:
drop {procedure|function|if exits} <过程名>