●MySQL提供了实现各种功能的函数
●常用的函数分类
常用的数学函数:
abc(x):返回的是绝对值
示例:返回-1和-3.14的绝对值
mysql> select abs(-1),abs(-3.14);
rand()返回0到1的随机数;注意:取值范围是0<=x<1;是取不到1的
示例:取平均值
mysql> select rand();
mod(x,y) 返回x除以y以后的余数
示例:返回14除以5的余数;返回的是4
mysql> select mod(14,5);
mysql> select power(8,2);
Round(x)返回离x最近的整数
只看小数点后面的第一位;去四舍五入
示例:返回离5.49最近的整数;因为0.49不足5,不满足四舍五入;所以返回的值是5
mysql> select round(5.49);
示例:返回离5.50最近的整数,因为0.50满足四舍五入;所以返回的值是6
mysql> select round(5.50);
还有一种结合“,”去使用;保留
示例:5.49保留一位,就是5.4是整值去看0.9是否满足四舍五入
保留一位,只看4后面的数字去比较四舍五入
mysql> select round(5.49,1);
mysql> select sqrt(81);
truncate(x,y):返回数字x截断为y位小数的值
示例:返回3.1415926截取小数点后三位,将值显示出来
mysql> select truncate(3.1415926,3);
ceil(x):返回大于或等于x的最小整数;向上取整数,只要超过1就会取到2
示例:返回大于或等于2.5的值
mysql> select ceil(2.5);
floor(x)返回小于或等于x的最大整数,向下取整数,会把小数点后面的直接抹掉
示例:返回小于或等于1.99的最大整数
mysql> select floor(1.99);
Greatest(x1,x2…):返回集合中的最大值
least(x1,x2…):返回集合中的最小值
示例:返回(10,20,30)中的最小值和最大值
mysql> select greatest(10,20,30),least(10,20,30);
对表中数据记录进行集中概括而设计的一类函数
常用的聚合函数:
avg()返回指定列的平均值
示例:返回分数的平均值
mysql> select avg(score) from cai;
count()返回指定列中非null值的个数
示例:返回分数列的个数
mysql> select count(score) from cai;
mysql> select min(score) from cai;
mysql> select max(score) from cai;
常用的字符串函数:
字符串函数:
Length(x)返回字符串x的长度
示例:
mysql> select length('caidadsada');
mysql> select length('cai d adsada'); ##空格符号也算长度的
trim()返回去除指定格式的值;只能去除前后两端空格,中间的空格是无法去除的
示例:
mysql> select trim(' chenggu ');
mysql> select trim(' cheng gu '); ##中间的空格是无法去除的
concat(x,y):将提供的参数x和y拼接成一个字符串
示例:
mysql> select concat('cheng',' gu');
mysql> select concat('cheng',trim(' gu'));
upper(x)将字母转换为大写;lower将字母转换为小写
示例:
mysql> select upper('abc'),lower('ABCc');
left(x,y):返回字符串x的前y个字符
示例:显示字符串abcsdada的前4位
mysql> select left('abcsdada',4);
mysql> select right('andasda',5); ##显示字符串的后五位
mysql> select concat(left('andasda',4),right('andasda',2));
Repeat(x,y)将字符串x重复y次
示例:将abc重复2次
mysql> select repeat('abc',2);
mysql> select concat('a',space('3'),'b');
Replace(x,y,z)替换:将字符串z替代字符串x中的字符串y
示例:将hello中的el替换为test
mysql> select replace('hello','el','test');
Strcmp(x,y)比较xy;返回的值为-1,0,1
x
x>y 返回1
注意只能一位数和一位数去比较
示例:比较5和8;不是拿57和8进行比较;所以返回的是-1
mysql> select strcmp(57,8);
mysql> select strcmp(57,4);
Substring(x,y,z)获取从字符串x中的第y个位置开始长度为z的字符串
语法:substring(完整字符串,起始位置,长度)
示例:获取从字符串abcdefg中第3个位置开始长度为4的字符串
mysql> select substring('abcdefg',3,4);
Reverse(x) :将字符串x反转
示例:将hello字符串反转
mysql> select reverse ('hello');
mysql> select upper(reverse ('hello'));
常用的日期函数
curdate()返回当前时间的年月日
mysql> select curdate(); ##返回当前时间
mysql> select curtime();
mysql> select now();
mysql> select month('2020-08-25');
mysql> select week('2020-08-25');
mysql> select hour('16:16:09');
mysql> select hour(curtime());
mysql> select minute(curtime());
mysql> select second(curtime());
返回是星期几;1是周日;2是周一;3是周二
dayofweek()
mysql> select dayofweek(curdate());
dayofmonth()
mysql> select dayofmonth(curdate());
mysql> select dayofyear(curdate());
存储过程简介
●MySQL 数据库存储过程是一组为了完成特定功能的 SQL 语句的集合。存储过程这个功能是从 5.0 版本才开始支持的,它可以加快数据库的处理速度,增强数据库在实际应用中的灵活性。存储过程在使用过程中是将常用或者复杂的工作预先使用 SQL 语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存 储过程时,只需要调用它即可。操作数据库的传统 SQL 语句在执行时需要先编译,然后再去执行,跟存储过程一对比,明显存储过程在执行上速度更快,效率更高。
●存储过程在数据库中创建并保存,它不仅仅是 SQL 语句的集合,还可以加入一些特殊的控制结构,也可以控制数据的访问方式。存储过程的应用范围很广,例如封装特定的功能、 在不同的应用程序或平台上执行相同的函数等等。
存储过程执行一次后,生成的二进制代码就驻留在缓冲区,之后如果再次调用的话,将 直接调用二进制代码,使得存储过程的执行效率和性能得到大幅提升。
存储过程是 SQL 语句加上控制语句的集合,有很强的灵活性,可以完成复杂的运算。
存储过程存储在服务器端,客户端调用时,直接在服务器端执行,客户端只是传输的调用语句,从而可以降低网络负载。
存储过程被创建后,可以多次重复调用,它将多条 SQL 封装到了一起,可随时针对 SQL
语句进行修改,不影响调用它的客户端。
存储过程可以完成所有的数据库操作,也可以通过编程的方式控制数据库的信息访问权限。
参数分为:
示例:调用存储过程,用于查看cai表中的name和score字段
1.配置存储过程的
mysql> delimiter $$ ##开头声明
mysql> create procedure MyRole() ##创建存储过程名;定义规则
-> begin ##开始
-> select name,score from cai; ##定义SQL语句
-> end$$ ##结束
Query OK, 0 rows affected (0.01 sec)
mysql> delimiter ; ##退出;注意需要加空格
2.查看创建的存储过程
mysql> show procedure status where db='cai'; 因为是cai数据库,不然东西太多
mysql> call MyRole();
mysql> delimiter $$
mysql> create procedure Test(in my_name varchar(10))
-> begin
-> select name,score from cai where name=my_name;
-> end$$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
2.调用存储过程
mysql> call Test('zhangsan'); ##后面加入参数
示例三:将zhangsan进行修改成绩,并分组;如果成绩在80分向上就分到1组;成绩在80分下面就分到第2组
1.配置存储过程的脚本
mysql> delimiter $$
mysql> create procedure Myname(in my_score decimal(5,2)) ##定义参数和规则
-> begin
-> declare hob int(3); ##定义变量hob;整型
-> if my_score >=80 then ##做if条件判断;如果输入分数大于80
-> set hob = 1; ##就会被分到1组
-> else
-> set hob = 2; ##否则就会被分到2组
-> end if;
-> update cai set score=my_score,hobby=hob where name='zhangsan';
-> end$$
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
2.调用存储过程
mysql> call Myname(85); ##将zhangsan的分数改为85;查看分组情况
mysql> call Myname(79); ##将分数改为79;查看分组情况
show procedure status where db=’数据库’;
mysql> show procedure status where db='cai'; 查询数据库cai的存储过程
删除存储过程:
drop procedure 存储过程名;
mysql> drop procedure Myname; ##删除存储过程Myname
修改存储过程:
Alter procedure <过程名> [ <特征> … ]