MySQL基础_存储过程与函数

1. 存储过程

含义:一组经过预先编译的sql语句的集合,存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。
好处:

  • 存储过程在创建的时候直接编译,而sql语句每次使用都要编译,提高执行效率
  • 提高了sql语句的重用性
  • 减少网络之间的数据传输,节省开销
/*
✳1.创建存储过程
语法:
	delimiter 新的结束标记
	create procedure 存储过程名(in|out|inout 参数名  参数类型,...)
	begin
		存储过程体;
	end 新的结束标记	
注意:
	①in、out、inout都可以在一个存储过程中带多个,且in可以省略
	②由于MySQL默认以";"为分隔符,如果我们没有声明新的分隔符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过
	 程会报错,所以要事先用delimiter关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用
	 完了通过delimiter ;语句将分隔符还原。
	③参数前面的符号的意思
		in:该参数只能作为输入 (该参数不能做返回值)
		out:该参数只能作为输出(该参数只能做返回值)
		inout:既能做输入又能做输出
	④存储过程体的每一条sql语句都需要用分号结尾!!!!!!!!!!!!
	⑤带out/inout的参数由于会返回某个结果值,所以在调用时,需要将参数列表设置为一个变量,那么返回结果就会赋值给该变量,我们	 通过使用该变量,即能使用返回的结果。
	
✳2.调用存储过程
语法:
	call 存储过程名(实参列表)
举例:
	调用in模式的参数:
		call 存储过程名(‘值’);
	调用out/inout模式的参数:
		set @变量名;
        call 存储过程名(@变量名);
        select @变量名;
        
✳3.删除存储过程
	drop procedure 存储过程名;
*/
#示例:创建一个名为name_to_score的存储过程,调用该存储过程时,输入学生姓名name,返回分数score,比如输入张三,返回90。
	delimiter //
	create procedure name_to_score(in NAME varchar(20),OUT score int)
	begin
		select s.score into score
		from students s
		where s.name=name;
	end //
	call name_to_score('张三',@score);
	select @score //

2. 函数

含义和好处与存储过程类似。

/*
✳1.创建函数
语法:
	CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型
	BEGIN
		函数体
	END
注意:
	①函数体中肯定需要有return语句;
	②由于MySQL默认以";"为分隔符,如果我们没有声明新的分隔符,那么编译器会把存储过程当成SQL语句进行处理,则存储过程的编译过	  
         程会报错,所以要事先用delimiter关键字申明当前段分隔符,这样MySQL才会将";"当做存储过程中的代码,不会执行这些代码,用
	 完了可以通过delimiter ;语句将分隔符还原。

✳2.调用函数
	SELECT 函数名(参数列表)
	
✳3.删除函数
	drop function 函数名;
*/
#示例:创建一个名为name_to_score的函数,函数功能是:输入学生姓名name,返回分数score,比如输入张三,返回90。
	delimiter //
	create function name_to_score(name varchar(20)) returns int
	begin
		declare ss int default 0;
		select s.score into ss
		from students s
		where s.name=name;
		return ss;
	end //
	select name_to_score('张三') //

3. 函数和存储过程的区别

关键字 调用语法 返回值 是否有return语句
函数 function select 函数(参数列表); 通过return,有且只能有一个
存储过程 procedure call 存储过程(参数列表); 通过out/inout,可以为零个、一个或多个

posted on 2020-07-10 18:14  CrushOnJava  阅读(126)  评论(0编辑  收藏  举报

导航