zoukankan      html  css  js  c++  java
  • Mysql之 存储过程 & 函数

    一、存储过程

    定义:一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

    优点:
    1.简化重复调用
    2.批量处理
    3.统一接口,保证数据安全

    1、创建和调用

    详情可见:https://www.cnblogs.com/geaozhang/p/6797357.html

    一、创建与调用 

    1.创建

    mysql> delimiter $$  #将语句的结束符号从分号;临时改为两个$$(可以是自定义)
    mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)
    -> BEGIN
    ->   DELETE FROM MATCHES
    -> WHERE playerno = p_playerno;
    -> END$$
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> delimiter ;  #将语句的结束符号恢复为分号

    2.调用 CALL ...

     call delete_matches(57); 

    3.存储过程体

    BEGIN
      BEGIN
        BEGIN
          statements; 
        END
      END
    END

    4.为语句块贴标签————增强代码可读性

    label1: BEGIN
      label2: BEGIN
        label3: BEGIN
          statements; 
        END label3 ;
      END label2;
    END label1

    二、存储过程的参数 

    0或多个参数
    注意点

    1. 如果没有参数,也需要写()
    2. 参数名字不要等于列的名字

    建议

    1. 输入使用in
    2. 返回使用out
    3. inout尽量少用

    2、变量定义

    详情可见:https://www.cnblogs.com/geaozhang/p/6803423.html

    一、局部变量

    1.语法:

    •  默认NULL
    • 可默认字面量
    begin
    declare var1 int default 100;
    end
    • 可默认标量子查询
    begin
    declare var2 int default(select count(*) from XXX);
    end

    2.作用域

    • 在外部块中声明的变量可以在内部块中直接使用;
    • 在内部块中声明的变量只能在内部块中使用。

    二、用户变量

    • 连接断开则消失
    • 不可跨连接使用

    表示:@
    定义

    1. set: set @var1:=999; 
    2. select: select @var2:=199; 

    三、系统变量

    表示:@@
    1)全局变量

    • 修改方式:配置文件(my.ini、my.cnf)
    • 作用域:整个服务器

    2)会话变量

    • 修改方式:set @@global_XXX:=123;
    • 作用域:仅限当前会话

    3、流程控制

      https://www.cnblogs.com/geaozhang/p/6808867.html

    二、函数

    定义:函数存储着一系列sql语句,调用函数就是一次性执行这些语句。所以函数可以降低语句重复

    注意点:自定义函数不能跨库使用

    1.创建 

    mysql> DELIMITER //
    mysql> CREATE FUNCTION Ver_Compare (n INT, m INT)
    -> RETURNS VARCHAR(50) #声明返回的数据类型
    -> BEGIN
    ->   DECLARE s VARCHAR(50);
    ->   IF n = m THEN SET s = 'equals';
    ->   ELSE
    ->     IF n > m THEN SET s = 'greater';
    ->     ELSE SET s = 'less';
    ->     END IF;
    ->     SET s = CONCAT('is ', s, ' than');
    ->   END IF;
    ->   SET s = CONCAT(n, ' ', s, ' ', m, '.');
    ->   RETURN s; #一个实际的返回值
    -> END //
    mysql> DELIMITER ;

    2.调用

    调用函数需要有变量接收其结果

    set @ax = Ver_Compare(1,2);
    select @ax;

    3.其他

    查看所有自定义函数: show function statusG; 
    删除指定自定义函数: drop function func_name; 

    三、对比

  • 相关阅读:
    Trusted_Connection
    自定义绑定表达式
    【Android】Uri、UriMatcher、ContentUris详解
    Android事件传递机制【按键事件】
    ANDROID 9.PNG 图片制作
    Android ProGuard实例教程
    Android 几个Info系列类的总结
    NDK的讲义
    Android FrameWork——Touch事件派发过程详解
    【Android面试】Android面试题集锦 (陆续更新)
  • 原文地址:https://www.cnblogs.com/sabertobih/p/13964293.html
Copyright © 2011-2022 走看看