• 熟知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具体分析见博文(MySQL 存储过程參数使用方法 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$$


    实例二 :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$$


    实例三: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$$

    实例四: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$$


    实例五: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$$


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    hdu 4308 Saving Princess claire_ BFS
    进程调度
    LinearLayout具体解释一:LinearLayout的简单介绍
    CSS: 解决Div float后,父Div无法高度自适应的问题
    框架布局FrameLayout
    Coundn't load memtrack module (No such file or directory)
    线性布局LinearLayout
    android视图概述
    activity状态的保存和恢复
    回溯和DFS效率分析
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4811202.html
Copyright © 2020-2023  润新知