• MySQL变量、函数、存储过程的使用


    MySQL语句:

    1. 变量
    2. 流程控制语句
    3. 函数
    4. 存储过程

    一、变量

    在mysql文档中,mysql变量可分为两大类,即系统变量和用户变量。

    但根据实际应用又被细化为四种类型,即局部变量用户变量会话变量全局变量

    1、局部变量

    mysql局部变量,只能用在begin/end语句块中,比如存储过程中的begin/end语句块。其作用域仅限于该语句块。

    -- declare语句专门用于定义局部变量,可以使用default来说明默认值
    -- DECLARE 变量名 [,variable_name...] 数据类型 [DEFAULT value];
    declare age int default 0;
    
     -- 局部变量的赋值方式一
     -- SET 变量名 = 表达式值 [,variable_name = expression ...]
     set age=18;
     
     -- 局部变量的赋值方式二
     select StuAge 
     into age
     from demo.student 
     where StuNo='A001';

    2、用户变量

    mysql用户变量,mysql中用户变量不用提前申明,在用的时候直接用“@变量名”使用就可以了。其作用域为当前连接。

     1 -- 第一种用法,使用set时可以用“=”或“:=”两种赋值符号赋值
     2 set @age=19;
     3 
     4 set @age:=20;
     5 
     6 -- 第二种用法,使用select时必须用“:=”赋值符号赋值
     7 select @age:=22;
     8 
     9 select @age:=StuAge 
    10 from demo.student 
    11 where StuNo='A001';

    3、会话变量

    mysql会话变量,服务器为每个连接的客户端维护一系列会话变量。其作用域仅限于当前连接,即每个连接中的会话变量是独立的。

     1 -- 显示所有的会话变量
     2 show session variables;
     3 
     4 -- 设置会话变量的值的三种方式
     5 set session auto_increment_increment=1;
     6 set @@session.auto_increment_increment=2;
     7 set auto_increment_increment=3;        -- 当省略session关键字时,默认缺省为session,即设置会话变量的值
     8 
     9 -- 查询会话变量的值的三种方式
    10 select @@auto_increment_increment;
    11 select @@session.auto_increment_increment;
    12 show session variables like '%auto_increment_increment%';        -- session关键字可省略
    13 
    14 -- 关键字session也可用关键字local替代
    15 set @@local.auto_increment_increment=1;
    16 select @@local.auto_increment_increment;

    4、全局变量

    mysql全局变量,全局变量影响服务器整体操作,当服务启动时,它将所有全局变量初始化为默认值。要想更改全局变量,必须具有super权限。其作用域为server的整个生命周期。

     1 -- 显示所有的全局变量
     2 show global variables;
     3 
     4 -- 设置全局变量的值的两种方式
     5 set global sql_warnings=ON;        -- global不能省略
     6 set @@global.sql_warnings=OFF;
     7 
     8 -- 查询全局变量的值的两种方式
     9 select @@global.sql_warnings;
    10 show global variables like '%sql_warnings%';

    二、流程控制语句

    1、区块定义

    [lable:]begin
      statement
    end [label];

    2、条件语句

     

    if 条件 then
        statement
    elseif 条件 then
        statement
    else statement 

    end if;

     

    case -- 条件开始
        when 条件 then statement;
        when 条件  then statement;
        else statement;
    end case; -- 条件结束

    3、循环语句

    • while循环

    [label:] WHILE expression DO
    
        statements
    
    END WHILE [label] ;
    • loop循环

    [label:] LOOP
    
        statements
       -- leave [label]
    -- 结束循环
       -- iterate [label] -- 结束本次循环
    END LOOP [label];
    • repeat until循环

    [label:] REPEAT
    
        statements
    
    UNTIL expression
    
    END REPEAT [label] ;

    三、函数

    函数存储着一系列sql语句,调用函数就是一次性执行这些语句,但是只能返回一个值。

    自定义函数分为二种,一种是标量值函数,另一种是表格值函数

    1、 标量值函数 :返回一个标量值

    Create function 函数名(参数) Returns 返回值数据类型
    as
    begin
        SQL语句(必须有return 变量或值)
    End
     -- 创建函数
    CREATE  FUNCTION MySTR(@strs VARCHAR(50)) RETURNS VARCHAR(50) 
    AS
    BEGIN
         DECLARE @str2 VARCHAR(30)
         SET @str2=@strs
    
         DECLARE @str3 VARCHAR(30)
         SET @str3=(select name from userinfo where huji=dbo.MySTR('邯郸') and id=23 )
         RETURN @str2
    END
    
    -- 调用函数
    SELECT dbo.MySTR('aa') AS result

    2、表格值函数 ,表格值函数有二种(内联表格值函数,多句表格值函数)

    • 内联表格值函数:返回一个表格

    create function 函数名(参数)returns table
    as
    return(一条SQL语句)
    -- 创建函数
    CREATE  FUNCTION   tabcmess(@title VARCHAR(10)) RETURNS  TABLE 
    AS 
    return(select title,des from product where title like '%'+@title+'%')
    
    -- 调用
    SELECT * FROM tabcmess('aaa')
    • 多句表格值函数

    create function 函数名(参数) returns 表格变量名 table(表格变量定义)
    as
    begin
        SQL语句
    end
    -- 创建函数
    CREATE   function tabcmessalot (@title varchar(10)) Returns @ctable table(title varchar(10) null,des varchar(100) null)
    As
    Begin
        Insert @ctable Select title,des from product WHERE title LIKE '%'+@title+'%'
        return
    End
     
    -- 调用函数
    SELECT * FROM tabcmessalot('aaa')

    四、存储过程

    存储过程简单来说,就是为以后的使用而保存的一条或多条 MySQL 语句的集合

      delimiter //  一般情况下MYSQL以;结尾表示确认输入并执行语句,但在存储过程中;不是表示结束,因此可以用该命令将;号改为//表示确认输入并执行。

    1、创建存储过程

    -- 创建存储过程
    create
    procedure sp_name(in 输入变量名 数据类型,out 输出变量名 数据类型,inout 输入输出变量名 数据类型) begin ......... end

    2、调用存储过程

    call sp_name([输入参数], [@输出变量名])  -- 调用存储过程
    select @输出变量名 -- 显示过程输出结果

    3、删除存储过程

    drop procedure sp_name

    4、其他命令

    -- 显示存储过程
    SHOW PROCEDURE STATUS;
    
    -- 显示特定数据库的存储过程
    SHOW PROCEDURE status where db = 'schooldb';
    
    -- 显示特定模式的存储过程
    SHOW PROCEDURE status where name like '%my%';
    
    -- 显示存储过程“mypro1”的源码
    SHOW CREATE PROCEDURE mypro1;
    作者:zhangshuai
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    jstl与el学习笔记
    Subversion 安装笔记
    某公司面试
    字符集与字符编码的一些小常识,以及java web中文乱码的一些solution
    分治算法与合并排序示例
    C/C++ 笔试,难倒我哉
    HTML meat作用
    VIM配置DBGp调试PHP程序
    更新系统引导项
    PHP技术讨论群
  • 原文地址:https://www.cnblogs.com/zhangshaui/p/15118517.html
Copyright © 2020-2023  润新知