SQL存储过程笔记,初识MySQL存储过程

  一、概述

  存储过程(Stored
Procedure)是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。

      优点:                                                            
                                                                       
                                     
1.由于存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的执行计划,不像解释执行的SQL语句那样在提出操作请求的时候才进行语法分析和优化工作,因而运行效率高,它提供了在服务端快速运行SQL语句的有效途径。

  2.存储过程降低了客户机和服务器之间的通信量,客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行许多条SQL语句,并执行数据处理,只有最中结果才返回客户端。

  3.存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可随时对存储过程进行修改,但对应用程序源代码毫无影响(因为应用程序源代码只包含存储过程的调用语句),从而极大地提高了程序的可移植性。

初识MySQL存储过程

存储过程(Stored
Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。
MySQL 存储过程是从 MySQL 5.0
开始增加的新功能。大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。
过程:封装起来的若干条语句,调用时这些封装体执行。把此过程存储到数据库中即存储过程.
函数:是一个有返回值的“过程”。
过程:没有返回值的函数。
存储过程的优点:
1、存储过程增强了SQL语言的功能和灵活性(可以SQL编程,能使用变量,表达式、控制结构体)
2、存储过程能实现较快的执行速度。(存储过程要比批处理的执行速度快很多,因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。)
3、存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。
4、存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。
5、存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。
存储过程的创建:

DELIMITER $$  //定义分隔符
CREATE PROCEDURE p()   //p为过程名
BEGIN
  --sql语句 //封装语句体
END $$

查看已有的存储过程:show procedure status G; 调用存储过程:call
存储过程名称(); 删除存储过程:drop procedure 存储过程名称;
变量声明:存储过程中用declare声明变量 格式:declare 变量名 变量类型
[default 默认值] 存储过程中,变量可以在SQL语句中合法的运算,如+ – * /
运算结果如何赋值 set 变量 := 表达式
存储过程传参:存储过程的括号里,可以声明参数。 语法是 create procedure
p([in/out/inout] 参数名 参数类型 ..) in out
inout详细分析见下一篇博文(链接明天给出)

实例一:创建 运算 赋值

CREATE PROCEDURE p1()
BEGIN
  DECLARE age INT DEFAULT 18;
  DECLARE height INT DEFAULT 180;
  SET age := age +20;
  SELECT CONCAT('年龄是', age, '身高是', height);
END$$

图片 1

实例二 :if/else 控制结构

CREATE PROCEDURE p2()
BEGIN
  DECLARE age INT DEFAULT 18;
  DECLARE height INT DEFAULT 180;
  IF age >= 18 THEN
    SELECT "已成年";
  ELSE
    SELECT "未成年";
  END IF;
END$$

图片 2

实例三:while/do 控制结构 求1-100的和

CREATE PROCEDURE p3()
BEGIN
  DECLARE total INT DEFAULT 0;
  DECLARE num INT DEFAULT 0;
  WHILE num<=100 DO
    SET total := num + total;
    SET num := num + 1;
   END WHILE;
   SELECT total;
END$$

图片 3
实例四:case 控制结构

CREATE PROCEDURE p4()
BEGIN
  DECLARE num INT DEFAULT 0;
  SET num := FLOOR(4*RAND());
  CASE num
  WHEN 1 THEN SELECT "cat";
  WHEN 2 THEN SELECT "dog";
  WHEN 3 THEN SELECT "sheep";
  ELSE SELECT "pig";
  END CASE;
END$$

图片 4

实例五:repeat循环

CREATE PROCEDURE p5()
BEGIN
  DECLARE num INT DEFAULT 0;
  DECLARE total INT DEFAULT 0;
  REPEAT
    SET total = num + total;
    SET num := num + 1;
  UNTIL num>100 END REPEAT;
  SELECT total;
END$$

图片 5

存储过程(Stored
Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字…

  二、基本语法

  1.变量声明: 

   declare @variable int  或者 @variable int 

   多个变量的声明 declare @variable int, @va vachar(10),….     

   区别:declare的含义是定义一个存储过程中使用的变量,而不加declare的是存储过程需要传入的参数,下面一个具体的实例可以看得更清楚:

--创建存储过程Create procedure sl_procedure@variable int --参数声明as declare @va int  --变量声明set @variable=22 --变量赋值select * from Albumswhere ArtistId=@va--执行存储过程exec sl_procedure 12 --12 为传入的参数

  2.变量赋值:  

set @variable=22 --变量赋值

   变量赋值时变量前必须加set

  3.条件控制语句:

if(条件)  begin  --执行语句块  endelse  begin  --执行语句块  end

  3.循环控制语句

while(条件)  begin  --执行语句块  end
  

发表评论

电子邮件地址不会被公开。 必填项已用*标注