1、MySQL中的函数:
- 1、数据库主要做存储和查询操作,逻辑操作一般不在数据库中进行操作
- 2、MySQL中的函数主要是自定义函数,其中自定义函数格式如下:
-- 修改语句结束符
delimiter $$
create function 函数名(参数名 数据类型, 参数名 数据类型) returns 返回值类型
begin
函数体
return 返回值;
end $$
-- 定义完成之后改回默认的
delimiter ;
注意:因为函数体中肯定会写SQL语句,SQL语句结束标记:; 会和函数结束之后end之后的:; 重合,所以定义函数之前需要修改下sql语句的结束符。
注意:可能会遇到安全等级不够的报错信息,实际操作中可能需要修改安全等级。
-- Error Code: 1046. No database selected Select the default
-- DB to be used by double-clicking its name in the SCHEMAS list in the sidebar.
use db_exercise;
-- Error Code: 1418. This function has none of DETERMINISTIC,
-- NO SQL, or READS SQL DATA in its declaration and binary
-- logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
set global log_bin_trust_function_creators=1;
-- 第一个简单函数
-- 修改结束符
delimiter $$
create function `add_a_b`(a int, b int) returns int
begin
return (a+b)/2;
end $$
-- 定义完成之后改回默认的
delimiter ;
-- 调用函数
select add_a_b(6,4);
-- 第二个分支函数
-- 修改结束符
delimiter $$
create function `chose_H_A_N`(a decimal(5,2)) returns char(1)
begin
if a >= 60 then return 'H';
elseif a >= 30 then return 'A';
else return 'N';
end if;
end $$
-- 定义完成之后改回默认的
delimiter ;
-- 调用函数
select chose_H_A_N(70.23);
-- 第三个循环自定义函数
delimiter $$
create function g_sum(num int) returns int
begin
-- 定义变量
declare r int default 0;
declare i int default 1;
while i <= num do
set r=r+i;
set i=i+1;
end while;
return r;
end $$
delimiter ;
select g_sum(4);
drop function 函数名;
2、存储过程:
- 1、存储过程可以理解成在服务器上保存一组SQL代码(或者可以理解为对SQL代码的封装)
- 2、存储过程的意义:将SQL语句设置成存储过程,要比一条条的sql语句执行性能效率快捷一些
- 3、存储过程语句如下:
-- 修改语句结束符
delimiter $$
create function 存储过程名(参数名 数据类型, 参数名 数据类型)
begin
存储过程体
return 返回值;
end $$
-- 定义完成之后改回默认的
delimiter ;
-- 删除存储过程的语句
drop procedure 存储过程名;
- 4、举例
- 注意:存储过程的数据也可以拿出来,需要对参数设置修饰符(in,out)
- 注意:函数和存储过程在workbench的图形化界面中也可以设置