说明:本文参考多篇文章,进行整理,适合初学者学习
1.procedure和function区别
procedure无返回值,function 有返回值
procedure:
DELIMITER //
CREATE PROCEDURE p_query_user()
begin
declare c varchar(100) default '0';
select 1111 ;
end //
DELIMITER ;
function :
DELIMITER //
CREATE FUNCTION f_query_user() RETURNS varchar(100) CHARSET gbk
begin
declare c varchar(100) default '0';
select 1111 INTO c;
RETURN c;
end //
DELIMITER ;
调用:
procedure CALL p_query_user();
function SELECT f_query_user();
procedure 不支持defualt值,可以改成set或者内部定义变量加上 defualt关键字;内部SQL支持select 1111;
function 不支持defualt值,可以改成set或者内部定义变量加上 defualt关键字;内部SQL不支持select 1111;
2.DELIMITER字段解释
DELIMITER $$
CREATE PROCEDURE mytest()
BEGIN
DECLARE a INT DEFAULT 1;
SET a=a+1;
SET @b=@b+1;
SELECT a,@b;
END
$$
DELIMITER;
DELIMITER 定义好结束符为"$$",意思就是当遇到$$的时候,mysql可以进行执行;如在END后面加上$$,这个时候说明定义好的函数已经完成编写,可以执行;
mysql默认;号自动执行,因此有时需要使用DELIMITER 来进行自定义结束符;
3.DECLARE和SET的解释
DECLARE定义的类似是局部变量,只在存储过程中的begin和end之间生效;
@set定义的类似全局变量,在整个会话中都起作用。
4.DEFINER的解释
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_adder`(IN a int, IN b int, OUT sum int)
BEGIN
if a is null
then
set a = 0;
else
set a=1;
end if;
if b is null then set b = 0;
end if;
set sum = a + b;
END
//
DELIMITER ;
1.指定 SQL SECURITY属性,设置为 DEFINER,在执行SQL存储时,是以DEFINER用户的权限来执行。如果设置为INVOKER,则为调用者的权限;
2.使用DEFINER方式,调用存储过程的用户必须有存储过程的EXECUTE权限DEFINER指定的用户必须是在mysql.user表中存在的用户;
3.DEFINER的定义格式:‘user_name’@‘host_name’;
4.不管是DEFINER还是INVOKER,在执行存储时,会检查相应的权限;
5.PROCEDURE参数的解释
IN、OUT和INOUT
1.IN是指传入的参数,OUT是指传出的参数;
2.IN的定义需在存储执行前定义,而OUT则不需要在存储执行前定义,而是定义在存储中。
3.INOUT输出参数和输入
6.BEGIN和END的解释
BEGIN和END之间则是存储过程的内容,所有执行的存储过程全部定义在BEGIN和END之间;
7.关于[if]语句的解释
语句格式[if…then…else if…else…end if]
第一个[if],是条件;如果达到条件,则执行[then];未达到条件则执行[else]或者[else if],最后以[end if]结束if语句;
8.关于[case]语句的解释
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_case`(IN a int)
BEGIN
DECLARE b varchar(500);
CASE a
WHEN 0 THEN
set b = 'return 0';
WHEN 1 THEN
set b = 'return 1';
ELSE
set b = 'return other';
END CASE;
select b;
END
//
DELIMITER;
格式:
【CASE 变量名
WHEN 值1 THEN
…
WHEN 值2 THEN
…
ELSE
…
END CASE;】
9.关于while语句的解释
DELIMITER //
CREATE DEFINER=`root`@`localhost` PROCEDURE `test_while`(IN a int)
BEGIN
DECLARE b int;
DECLARE c int;
SET b = 0;
SET c = 0;
WHILE b <= a DO
set c = c + b;
set b = b + 1;
END WHILE;
SELECT c;
END
//
DELIMITER ;
格式:【WHILE 条件 DO 执行内容 END WHILE】
10.关于部分命令
1.调用:call procedure_name()
2.删除:drop procedure if exists procedure_name
3.查询状态:show procedure status
4.显示详细信息:show create procedure procedure_name