存储过程和函数

/*数据库函数*/
/*
1.count:
计数函数:对元组或者属性计数.
一般格式:count(属性名)。
select count(*)from 表名;
select count(属性名)from表名 where 条件表达式
count支持条件计数,只算计算有效值,不算null值
*/ 
select count(s_xh) from student;
/*
2.max
求最大值函数,查询字段中的最大的数。一般格式:max(属性名)
如:selectmax(属性名)from表名[where条件表达式];
*/
/*
3.min
求最小值函数,查询字段中的最小的数。一般格式:min(属性名)
如:selectmin(属性名)from表名[where条件表达式];
*/
/*
4.avg
求平均值函数,查询字段中所有数的平均值。一般格式:avg(属性名)
select avg(属性名)from表名[where条件表达式]
*/
/*
5.sum
求和函数,查询属性中所有数的和。一般格式:sum(属性名)
select sum(属性名)from表名[where条件表达式]#除了通过函数计算还能直接用运算符计算
如:select属性名1*2,属性名2+属性名3from表名:
*/
/*
6.now
求当前的日期和时间。
一般格式:n 。 
如:select now();
*/
select now();
/*
7.date
求日期函数。
一般格式:date(日期时间类型的属性名)。
如:select date(birthday)from student;
*/
select date(now());
/*
8.time
求时间函数。
一般格式:time(日期时间类型的属性名)。
如:select time(birthday)from student;
*/
/*
9. date format
时间日期类型转字符串类型函数。
一般格式:date fromat(日期时间类型,格式字符串)如:select date format(now(),'%Y%m%d:%H%i%s');#格式字符串可用变量来代替(之后会有学到变量)
*/
select date_format(now(),"%Y-%m-%d:%H-%i-%s");
-- 数字时间24小时
/*
10.upper
小写字母转大写字母函数。
一般格式:upper(字符型属性名);如:selectupper('abc'):
#也可用ucase函数代替,如:selectucase('abc):
*/
select upper("123grtfeesfdc");
/*
11.lower
大写字母转小写字母函数。
一般格式:lower(字符型属性名);如:selectupper('ABC');
#也可用Icase函数代替,如:select Icase('ABC');
*/
select lower("KGHYJUFDCVXDBFG");
/*
12substring
提取字串函数,以给定的参数求字符串中的一个子串。一般格式:substring(字符串,start,lenth);
#从字符串中第start个字符开始取出长度为lenth的字符串。如:selectsubstring('abc123@#$43);#结果为123
#也可以用mid函数代替,如:selectmid('abc123@#$'43);
*/
select substring("213456sxawefcawe65433243;'/",6,5);
/*
13round
四舍五入函数。(可代替floor函数,用于取整)一般格式:round(数值类型[,精确位数]);
如:select round(1234.56);#不加精确位数默认精确到整数位 select round(123.456,2);#加上精确位数就保留多少位小数
*/
select round(123.564,2);
/*
14power
求次方函数
一般格式:power(底数指数);
如:selectpower(23);#求2的3次方的值
#可以用pow函数代替power函数,如:selectpow(23):
# 举一反三
#既然有求次方函数,是不是也有求次方根(开方)函数呢?答:没有求次方根函数。
#那用什么求次方根(开方)?答:还是用pow函数。
如:pow(91/2);pow(40.5)#只需要把指数改成小数或分数
*/
select power(3,3);
/*
14.length
返回字符串的长度
一般格式:length(字符串)
*/
/*
15.concat
字符串连接函数,连接多个字符串
一般格式:concat(字符串1字符串2……字符串n)
*/
/*
16.database
返回当前数据库名
一般格式:database()
*/
select database();
 /*
17.user
获取当前用户名基本格式:user()
*/
select user();
/*自定义函数*/
/*创建的基本格式:
create function 函数名(函数参数 数据类型)
return 返回值类型
begin
#函数体
return(函数返回值)
end;
#8.0版本的数据库,增加了一个数据库安全选项需要执行以下代码才能创建函数
set global log bin trust function creators=TRUE;
函数的调用与删除
①函数调用
函数调用的基本格式:
select函数名(函数参数);
2用表格数据作为函数参数
select函数名(表格属性)from 表名;
删除函数
drop function 函数名;
④ 自定义函数的使用限制
数据库的函数中无法执行SQL语句,因为数据库中的函数都只用于数据处理 
	*/
create function sum1(x int,y int)
returns int -- 给定函数的返回值类型
return x+y;

set global log_bin_trust_function_creators=TRUE;
-- begin -- {

-- end ; --}
select sum1(1,3)
 
/*存储过程中支持部分SQL语句,但是不支持use等动态SQL语句
# 2、存储过程的调用
-- 调用存储过程的基本格式:call 存储过程名(「参数]); 
call pro select stu();
call pro select_stu; -- 调用无参存储过程括号可以省略
*/
# 3、查看存储过程的基本信息
show create procedure pro_select_stu;
#4、存储过程的删除
drop procedure pro_select_stu;
# 5、存储过程的修改
-- Mysql不支持存储过程功能的修改
-- 可以删除后重新创
/*
1.创建带参存储过程
create procedure 存储过过程名(
in[out][inout]参数名1 参数类型1
in[out][inout]参数名2 参数类型2,......,
in[out][inout]参数名n 参数类型n
)
began
sql语句;
end;	
*/
-- 创建一个查询指定姓名的学生信息的存储过程
create procedure pro_select_stus(in sname varchar(10))
select * from stud.student where s_name = sname;

call pro_select_stus("李明");
/*
存储过程中执行多条sql语句的情况
创建插入学生信息的储存过称
*/

delimiter //
create procedure pro_is
(
  in sname varchar(10),
	in sxh varchar(4),
  in sage int,
	in ssex varchar(4)
)
begin	
	insert into student values(sname,sxh,sage,ssex);
	select *from student where s_name=sname;
	-- .........
end//
delimiter ;
call pro_is("李分",'0007',22,"女");

/*
SQL是以';作为结束标志
数据座中如果一条复合语句中拥有多条简单语句,则不能以默认结束符";分号结束
重定义结束符 sixstared   
注意:MySQL执行SQL语句的过程中,会以';’作为结束符,所以一旦遇到';’数据库会认为当前SQL语句已结束。
这里使用workbench编写存储过程时会出错,需要重定义结束符。

delimiter指令的基本使用:
delimiter
#运用delimiter重定义结束符
(如:delimiter//或delimiter$等)然后存储过程的结尾是end//(而不是end;)
delimiter可定义任何符号为结束符,但最好不要覆盖符号本身的意义
执行完后需要delimiter;将结束符改回来。
*/


/*

4   存储过程和函数类似,都是一个事先写好命令并编译后存在数据库中的MySQL语句集合,
用于简化开发人员的工作,减少数据在数据库和应用服务器之间传输,提高处理效率. 

既然都是函数,那就会有值的传入和传出,其中也存在一些区别。
存储过程:参数的传递(参数类型)能用IN、OUTINOUT,并且没有直接的返回值。
IN表示数据传入,OUT表示数据传出,INOUT表示既可传入又可传出。
存储过程内不能使用use 切换数据库。
函数:参数只能使用IN,并且必须要有返回值。
存储过程关键字:procedure 
创建存储过程的基本格式 :
create procedure 存储过程名()
beign
  sql语句1:
	sql语句2:
	...
	sql语句:
	end;
*/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒菡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值