他人理解+自理解+学习Mysql存储过程

来源:互联网 发布:阿里云怎么收费标准 编辑:程序博客网 时间:2024/05/01 03:31

作为一个水平无法溢出的菜鸟,还是老老实实认真学习的好。在系统的学习Mysql存储过程之前,还需要部分的解释一下Mysql中的一些在存储过程中出现的关键字以及语法的使用。

decimal(2,1)  指定义的数值含有两位有效长度,其中包含一位小数。DECLARE(declare)在mysql中是声明一个变量的意思。DEFAULT  在sql中为列插入默认值。

例:

DECLARE val  int DEFAULT 6; 声明一个变量val,其类型为int,自定义默认值为6。

in :给参数传入值,定义的参数就得到了值。out:模式定义的参数只能在过程体内部赋值,表示该参数可以将某

值传递回调用他的过程(在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值) inout:

用者还可以通过 inout 参数传递值给存储过程,也可以从存储过程内部传值给调用者。

例:

CREATE PROCEDURE  test (in type INT);/*将调用方法时传入的参数赋值给type*/
CREATE PROCEDURE avgid(OUT avgi DECIMAL(3,1)        /*要输出的参数*/)BEGINSELECT AVG(id) INTO avgi FROM `user`; /*通过在过程内部将值赋予给参数*/END; CALL avgid(@avgi); /*调用该存储过程*/SELECT @avgi;/*获取查询值*/
关于inout的使用:
CREATE PROCEDURE p3(INOUT age INT)
BEGIN
  SET age := age + 20;
END
set @currage =18
call p3(@currage)/*存储过程在调用currage的时候,会将该值直接赋值到存储过程中并执行(所谓的内部传
值)*/
以上是部分的功能说明,接下来是对存储过程的学习。
个人认为,在学习任何技术之前一定要保证有这样的想法:该技术的作用是什么?与之前所学习的技术有什么关联
或者重大的区别?是否有使用到之前的知识?
首先了解存储过程是什么:存储过程就是有业务逻辑和流程的集合,可以在存储过程中创建表,更新数据,删
除等等。
其次存储过程通过把处理封装在容易使用的单元中,简化复杂的操作;
由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和
测试)存储过程,则所使用的代码都是相同的。使用存储过程,也大量的减少了错误保证数据的一致性;
简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人
员甚至不需要知道这些变化。
下面是简单的存储过程实例:
创建存储过程:
CREATE PROCUDER procude_rname()
BEGIN
SQL执行语句;
EDN;
call procedureName();/*调用存储过程*/

DORP PROCEDURE IFEXISTS procedureName;/*删除存储过程,删除后面无需调用括号*/

带参的存储过程:

1.    create procedure procedureName( 

2.        out min decimal(8,2), 

3.        out avg decimal(8,2), 

4.        out max decimal(8,2) 

5.    

6.    BEGIN 

7.        select MIN(price) INTO min from order

8.        select AVG(price) into avg from order

9.        select MAX(price) into max from order

END 

1.    -- 由于过程指定三个参数, 故调用必须要参数匹配 

call procedureName(@min, @avg, @max);  
select @min, @avg, @max;
以下为带条件语句的存储过程:
CREATE PROCEDURE useif(in type INT) /*创建一个存储过程*/
BEGIN
DECLARE c varchar(200);
if type = 0 THEN
set c = '该参数值为 0';
ELSE 
set c ='该参数值不为 0';
END IF;
SELECT c;
END;
set @type=1;
call useif(@type);
查询结果:
以上为本次对存储过程的基础学习,只有掌握了基础才能够很好的进阶。