• 存储过程入门


    1. 什么是存储过程

    概念:存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。


    1.1 好使用它的好处

    1. 效率高—— 存储过程只在创造时进行编译,存储过程编译一次后,就会存到数据库,每次调用时都直接执行。
    2. 降低网络流量—— 存储过程编译好会放在数据库,我们在远程调用时,不会传输大量的字符串类型的sql语句。
    3. 复用性高—— 存储过程往往是针对一个特定的功能编写的,当再需要完成这个特定的功能时,可以再次调用该存储过程。
    4. 安全性高—— 可设定只有某些用户才具有对指定存储过程的使用权



    2. 存储过程基本语法

    2.1 创建存储过程

    CREATE PROCEDURE <过程名> ( [过程参数[,…] ] ) <过程体>
    
    [过程参数[,…] ] 格式
    
    [ IN | OUT | INOUT ] <参数名> <类型>
    
    
    
    
    
    ////////////////////////
    
    过程名:存储过程的名称,默认在当前数据库中创建。
           若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。
    
    过程参数:存储过程的参数列表。
             其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。
             当有多个参数时,参数列表中彼此间用逗号分隔。
             存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号)。
          
             MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。
             * 输入参数可以传递给一个存储过程,
             * 输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。
    
             todo 参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。
    
    
    ////////////////////////
    
    过程体:存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。
           以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。
    
    create procedure 名称()
    
    begin
    
    .........
    
    end
    
    create procedure testa()
    
    begin
    
        select * from users;
    
        select * from orders;
    
    end;
    
    mysql> delimiter $$
    mysql> create procedure in_param(in p_in int)
        -> begin
        ->   select p_in;
        ->   set p_in=2;
        ->    select P_in;
        -> end$$
    mysql> delimiter ;
     
    mysql> set @p_in=1;
     
    mysql> call in_param(@p_in);
    

    2.2 调用存储过程

    call testa();
    

    2.3 存储过程的变量

    变量:分为全局变量和局部变量


    局部变量:是在函数内作定义说明的。其作用域仅限于函数内部,离开该函数后再使用这种变量是非法的。局部变量声明一定要放在存储过程体的开始

    局部变量的定义:必须先用Declare命令定以后才可以使用,declare{@变量名 数据类型}
    
    局部变量的赋值方法:set{@变量名=表达式}或者select{@变量名=表达式}
    
    
    
  • 相关阅读:
    八个方便C#开发的省时的国外工具
    从babel-polyfill的一个坑而起
    Universal Link
    微信机器人
    微信手记
    Elasticsearch手记
    小游戏引擎手记
    【数学基础】3D数学基础-左右手坐标系
    【linux基础】linux误改sudoers权限之后的恢复及配置sudoers
    【c/c++基础】struct/typedef struct的用法详解总结
  • 原文地址:https://www.cnblogs.com/itlihao/p/16242600.html
Copyright © 2020-2023  润新知