zoukankan      html  css  js  c++  java
  • 十:存储过程和函数

    1什么是存储过程和函数:

    存储过程和函数:事先经过编译并存储在数据库中的一段sql语句的集合。

    使用好处:

    1、简化应用开发人员的很多工作

    2、减少数据在数据库和应用服务器之间的传输

    3、提高了数据处理的效率

    2)创建存储过程

    创建存储过程:

    create procedure 存储过程名 ([proc_parameter[,]])

    [characteristic]routine_body

    ###创建存储过程

    语法: in(输入 需要传参数) out(输出 返回值) inout(输入输出)

    create procedure 存储过程名(in|out|inout 参数名  参数类型,...)

    begin

    存储过程体

     End

    create procedure 存储过程名(参数模式 参数名 参数类型)

    begin

    存储过程体

    end

    注意:

    1.参数模式:inoutinout,其中in可以省略

    2.存储过程体的每一条sql语句都需要用分号结尾

    二、调用

    call 存储过程名(实参列表)

    举例:

    调用in模式的参数:call sp1‘值’;

    调用out模式的参数:set @name; call sp1(@name);select @name;

    调用inout模式的参数:set @name=; call sp1(@name); select @name;

    三:示例
    使用无参进行创建调用
    #删除
    DROP PROCEDURE myp1;
    
    #声明  注意在命令行里面进行调用,直接调用用报错
    DELIMITER $
    CREATE PROCEDURE myp1()
    BEGIN
      INSERT INTO admin(username,`password`) VALUES('Lim','1001'), ('ZhangHao','1001');
    END $
    
    #调用
    CALL myp1()$;
    
    
    
    
    字符集有问题。
    # in 类型参数的调用
    
    CREATE PROCEDURE myp2( IN  girlname VARCHAR(20) )
    BEGIN
         SELECT bo.* FROM boys bo RIGHT JOIN beauty b ON bo.id = b.boyfriend_id
         WHERE b.name = girlname;
    END $
    
    #调用
    CALL myp2('小昭')$
    
    
    DELIMITER $  //声明结束符的位置代表命令的结束行 $代表结束行
    CREATE PROCEDURE myp4( IN username VARCHAR(20) , IN pass VARCHAR(20) )
    BEGIN
         DECLARE rt INT DEFAULT 0;
         SELECT COUNT(*)  INTO rt FROM  
         admin WHERE admin.username = username AND admin.password = pass;
         SELECT IF( rt >0,'成功','失败');
    END $
    
    CALL myp4('lisi','1001')$
    
    #声明;
    CREATE PROCEDURE myp5( IN username VARCHAR(20) , OUT  boyname VARCHAR(20))
    BEGIN
       
       SELECT bo.boyName INTO boyname 
       FROM boys bo INNER JOIN  beauty be
       ON bo.id = be.boyfriend_id
       WHERE  be.name = username;
    END $
    
    
    #调用
    CALL myp5('小昭',@boyname)$
    SELECT @boyname$;

    3系统变量

    作用域:针对于所有会话(连接)有效,但不能跨重启

    查看所有全局变量

    SHOW GLOBAL VARIABLES;

    查看满足条件的部分系统变量

    SHOW GLOBAL VARIABLES LIKE '%char%';

    查看指定的系统变量的值

    SELECT @@global.autocommit;

    为某个系统变量赋值

    SET @@global.autocommit=0;

    SET GLOBAL autocommit=0;

    4会话变量

    作用域:针对于当前会话(连接)有效

    查看所有会话变量

    SHOW SESSION VARIABLES;

    查看满足条件的部分会话变量

    SHOW SESSION VARIABLES LIKE '%char%';

    查看指定的会话变量的值

    SELECT @@autocommit;

    SELECT @@session.tx_isolation;

    为某个会话变量赋值

    SET @@session.tx_isolation='read-uncommitted';

    SET SESSION tx_isolation='read-committed';

    5用户变量

    声明并初始化:

    SET @变量名=;

    SET @变量名:=;

    SELECT @变量名:=;

    示例:SQL 声明变量

    DECLARE NAME VARCHAR(20) DEFAULT '';

    SET @name='li si';

    SELECT @NAME;

    赋值:

    方式一:一般用于赋简单的值

    SET 变量名=;

    SET 变量名:=;

    SELECT 变量名:=;

    方式二:一般用于赋表 中的字段值

    SELECT 字段名或表达式 INTO 变量

    FROM ;

    使用:

    select @变量名;

    6局部变量

    声明:

       declare 变量名 类型 【default 值】;

    赋值:

      方式一:一般用于赋简单的值

      SET 变量名=;

      SET 变量名:=;

      SELECT 变量名:=;

    方式二:一般用于赋表 中的字段值

    SELECT 字段名或表达式 INTO 变量 FROM ;

    使用:

    select 变量名

    二者的区别:

    作用域 定义位置 语法

    用户变量 当前会话 会话的任何地方 @符号,不用指定类型

    局部变量 定义它的BEGIN END BEGIN END的第一句话 一般不用加@,需要指定类型

    (1)创建使用函数

    ###创建函数

    学过的函数:LENGTHSUBSTRCONCAT

    语法:

    CREATE FUNCTION 函数名(参数名 参数类型,...) RETURNS 返回类型

    BEGIN

    函数体

    END

    ###调用函数

    SELECT 函数名(实参列表)

    ###函数和存储过程的区别

    函数 :FUNCTION SELECT 函数() 只能是一个 一般用于查询结果为一个值并返回时,当有返回值而且仅仅一个

    存储过程: PROCEDURE CALL 存储过程() 可以有0个或多个 一般用于更新;

    ###示例 查询员工总个数
    
    
    CREATE FUNCTION myf1() RETURNS INT
    BEGIN
        DECLARE c INT DEFAULT 0; --声明
        SELECT COUNT(*) INTO c 
        FROM employees;
        RETURN c;  --返回
    END $
    
    SELECT myf1()$
    
    
    
    CREATE FUNCTION myf2( E_Name  VARCHAR(20) ) RETURNS DOUBLE
    BEGIN
        DECLARE sal DOUBLE DEFAULT 0;
        SET @sal=0;
        SELECT salary INTO sal 
        FROM employees WHERE first_name = E_Name;
        RETURN sal;  
    END $
    DESC employees
    SELECT myf2('Steven')$
    
    
    ###调用函数
        SELECT 函数名(实参列表)
    
    
    ##查看函数定义
    show create function
    ##删除
    
    drop function ...
  • 相关阅读:
    一个接口的性能问题定位和分析过程
    HTTP请求全过程(很全面)
    Linux中查看物理CPU个数、核数、逻辑CPU个数
    linux查看文件大小
    ping不通判断系统是否开机
    ping不通判断系统是否开机
    linux压缩解压文件命令
    python连接redis集群,添加数据
    初学python
    企业级BI为什么这么难做?
  • 原文地址:https://www.cnblogs.com/love-life-insist/p/12869558.html
Copyright © 2011-2022 走看看