MySQL存储过程的基本知识点

说明:本文参考多篇文章,进行整理,适合初学者学习

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
显示详细信息

猜你喜欢

转载自blog.csdn.net/m0_37356874/article/details/91378444
今日推荐