存储过程和函数

存储过程和函数

高级语言都有自己的库函数,数据库也不例外,在数据库中也提供了一些用于实现特定功能的函数。

一、数据库函数

1、聚合函数
在数据库函数中,聚集函数是我们最常用的一类。所谓的聚合,就是对一组值进行组合计算,返回单个值。

-- ① count
计数函数,对元组或者属性计数。
一般格式:count(属性名)。
select count(*) from 表名;  -- ‘*’是对整个表的元组进行计数
select count(属性名) from 表名 where 条件表达式;
-- count 支持条件计数,只计算有效值,不计算null值


-- ② max
求最大值函数,查询字段中的最大的数。
一般格式:max(属性名)
如:select max(属性名) from 表名 [where 条件表达式];
select max(S_age) from student;
 
-- ③ min
求最小值函数,查询字段中的最小的数。
一般格式:min(属性名)
如:select min(属性名) from 表名 [where 条件表达式];

-- ④ avg
求平均值函数,查询字段中所有数的平均值。
一般格式:avg(属性名)
select avg(属性名) from 表名 [where 条件表达式];

-- ⑤ sum
求和函数,查询属性中所有数的和。
一般格式:sum(属性名)
select sum(属性名) from 表名 [where 条件表达式];
-- 除了通过函数计算还能直接用运算符计算
如:select 属性名1*2,属性名2+属性名3 from 表名;


2、日期时间函数

-- ① now
求当前的日期和时间。
一般格式:now()。
如:select now();

-- ② date
求日期函数。
一般格式:date(日期时间类型的属性名)。
如:select date(birthday) from student;

-- ③ time
求时间函数。
一般格式:time(日期时间类型的属性名)。
如:select time(birthday) from student;

-- ④ date_format
时间日期类型转字符串类型函数。
一般格式:date_fromat(日期时间类型,格式字符串)
如:select date_format(now(),'%Y%m%d:%H%i%s');
-- 格式字符串可用变量来代替(之后会有学到变量)


3、常用的一般函数
-- ① upper
小写字母转大写字母函数。
一般格式:upper(字符型属性名);
如:select upper('abc');
-- 也可用 ucase函数代替,如:select ucase('abc');

-- ② lower
大写字母转小写字母函数。
一般格式:lower(字符型属性名);
如:select upper('ABC');
-- 也可用 lcase函数代替,如:select lcase('ABC');

-- ③ substring
提取字串函数,以给定的参数求字符串中的一个子串。
一般格式:substring(字符串,start,lenth);
-- 从字符串中第start个字符开始取出长度为lenth的字符串。
如:select substring('abc123@#$',4,3);# 结果为123
-- 也可以用mid函数代替,如:select mid('abc123@#$',4,3);

-- ④ round
四舍五入函数。(可代替floor函数,用于取整)
一般格式:round(数值类型[,精确位数]);
如:select round(1234.56); # 不加精确位数默认精确到整数位
select round(123.456,2); #加上精确位数就保留多少位小数

-- ⑤ power
求次方函数
一般格式:power(底数,指数);
如:select power(2,3);	-- 求2的3次方的值
-- 可以用pow函数代替power函数,如:select pow(2,3);
-- 既然有求次方函数,是不是也有求次方根(开方)函数呢?
答:没有求次方根函数。
-- 那用什么求次方根(开方)?
答:还是用pow函数。
如:pow(9,1/2);	pow(4,0.5) -- 只需要把指数改成小数或分数

-- ⑥ length
返回字符串的长度
一般格式:length(字符串)
-- ⑦ concat
字符串连接函数,连接多个字符串
一般格式:concat(字符串1,字符串2,……,字符串n)
-- ⑧ database
返回当前数据库名
一般格式:database()
-- ⑨ user
获取当前用户名
基本格式:user()

除了之前讲的函数之外,库函数中还有其他函数,如:求余mod,随机数rand,三角函数sin、cos、tan、arc tan,圆周率pi等。
数据库的库函数相当于C语言的库函数差不多,C语言库函数里有的数据处理函数,数据库中基本都会有;但是mysql 中的函数不同于C语言中的函数,mysql中的函数只用于数据处理,不会进行其他命令行操作。

二、自定义函数

数据库中自定义函数使用的特别少,不用详细了解。

数据库函数中无法执行SQL语句,数据库中的函数只用于数据处理,不能用于实现其它功能。

数据库中的函数必须要有返回值。

数据库中的数据处理需要用到函数的,一般使用数据库的库函数就能够完成,不常用自定义函数。

1、自定义函数的创建
-- 创建自定义函数的基本格式:
create function 函数名(函数参数 数据类型)
returns 返回值类型
begin
	-- 函数体
	return(函数返回值)
end;


-- 8.0版本的数据库,增加了一个数据库安全选项,需要执行以下代码才能创建函数
set global log_bin_trust_function_creators=TRUE;


2、函数的调用与删除

-- ① 函数调用
-- 函数调用的基本格式:
select 函数名(函数参数);
SELECT sum1(123,456);

-- ② 用表格数据作为函数参数
select 函数名(表格属性) from 表名;

-- ③ 删除函数
drop function 函数名;
drop function sum1;

三、存储过程

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

既然都是函数,那就会有值的传入和传出,其中也存在一些区别。

存储过程:参数的传递(参数类型)能用 IN 、 OUT 、 INOUT ,并且没有直接的返回值。IN 表示数据传入,OUT 表示数据传出,INOUT 表示既可传入又可传出。存储过程内不能使用 use 切换数据库。

函数:参数只能使用IN,并且必须要有返回值。

posted @ 2022-09-12 19:08  宣哲  阅读(130)  评论(0编辑  收藏  举报