正在玩命加载中 . . .

MySQL(六)


变量

分类

  • 系统变量
    • 全局变量
    • 会话变量
  • 自定义变量
    • 用户变量
    • 局部变量

系统变量

变量由系统提供,不是用户自定义,属于服务器层面

使用语法:

  1. 查看所有的系统变量

    show global variables; /*全局变量*/
    show session variables; /*会话变量,session可不写*/
  2. 查看满足条件的部分系统变量

    show global variables like '%char%';
  3. 查看指定的某个系统变量的值

    select @@global.系统变量名;
  4. 为某个系统变量赋值

    set global 系统变量名 =; /*方法一*/
    set @@global.系统变量名 =; /*方法二*/

全局变量

作用域:服务器每次启动将为所有的全局变量附初始值。针对所有的会话(连接)有效,但是不能跨重启。

  1. 查看所有的全局变量

    show global variables; /*全局变量*/
  2. 查看部分全局变量

  3. 查看指定的某个全局变量的值

    select @@global.autocommit;
    select @@transaction_isolation;
  4. 为某个全局变量赋值

    set @@global.autocommit = 0; /*取消自动提交*/

会话变量

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

自定义变量

变量是用户自己定义的。

使用步骤:

  1. 声明
  2. 赋值
  3. 使用(查看,比较,运算等)

用户变量

作用域:针对于当前会话(连接)有效,同于会话变量的作用域。

应用:任何地方,也就是begin,end里面或外面。

  1. 声明并初始化

    set @用户变量名 =;
    set @用户变量名 : 值;
    select @用户变量名 : 值;
  2. 赋值(更新)

    方式一:

    set @用户变量名 =;
    set @用户变量名 : 值;
    select @用户变量名 : 值;

    方式二:

    select 字段 into 变量名 from;
  3. 查看某个用户变量的值

    select @用户变量名;

局部变量

作用域:仅仅在定义的begin,end中有效。

应用:begin,end里面第一句话

  1. 声明

    declare 变量名 类型;
    declare 变量名 类型 default;
  2. 赋值

    set @局部变量名 =;
    set @局部变量名 : 值;
    select @局部变量名 : 值;
    
    select 字段 into 局部变量名 from;
  3. 使用

    select @局部变量名;

存储过程 procedure 和函数

类似于java中的方法。

存储过程 procedure

含义:一组预先编译好的SQL语句的集合,理解成批处理语句。

优点:

  • 提高代码的重用性
  • 简化操作
  • 减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。
  1. 创建语法:

    create procedure 存储过程名(参数列表)
    begin
        存储过程体(一组合法的SQL语句)
    end

    注意:参数列表包括三部分:参数模式,参数名,参数类型。

    例:

    in stuname varchar(20)

    参数模式:in (作为输入,需要调用方法传入值),out (作为输出,作为返回值),inout (作为输入和输出)

    如果存储过程体只有一句话,那么begin,end可省略。

    存储过程的结尾可以使用delimiter重新设置。

    delimiter $ /*$ 为结束标记,其他也可*/
  2. 调用语法

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

案例演示一:

存储过程01

存储过程02

结果:

存储过程03

案例演示二:创建带in模式的存储过程

案例1:创建存储过程实现,根据女神名,查询对应的男神信息

案例2:创建存储过程实现,用户是否登录

函数

与存储过程的区别:

  • 存储过程:可以有0个返回,也可以有多个返回,适合做批量插入,批量更新。
  • 有且仅有一个返回,适合做处理数据后返回一个结果。
  1. 创建语法:

    create function 函数名(参数列表) returns 返回类型
    begin
        函数体
    end

    注意

    • 参数列表包括两部分:参数名,参数类型。

    • 函数体:必须有return语句,否则报错。最好return语句放在最后。

    • 函数体中只有一句话,可以省略begin,end。

    • 使用delimiter语句设置结束标记。

  2. 调用语法:

    select 函数名(参数列表)
  3. 查看函数

    show create function 函数名;
  4. 删除函数

    drop function 函数名;

案例演示:

  1. 无参有返回

    函数01

  2. 有参有返回

    函数02

流程控制结构

  • 顺序结构
  • 分支结构
  • 循环结构

分支结构

if函数

语法:

if(表达式1, 表达式2, 表达式3)

case结构

  1. 类似于java中的switch结构,一般用于实现的等值判断

    case 变量|表达式|字段
    where 要判断的值 then 返回值1
    where 要判断的值 then 返回值2
    ......
    else 要返回的值n
    end
    /*单独执行,放在存储过程和函数中*/
    case 变量|表达式|字段
    where 要判断的值 then 语句1;
    where 要判断的值 then 语句2;
    ......;
    else 语句n;
    end case;
  2. 类似java中的多重if语句,一般用于实现区间判断

    case 变量|表达式|字段
    where 要判断的条件 then 返回值1
    where 要判断的条件 then 返回值2
    ......
    else 要返回的值n
    end
    /*单独执行,放在存储过程和函数中*/
    case 变量|表达式|字段
    where 要判断的值 then 语句1;
    where 要判断的值 then 语句2;
    ......;
    else 语句n;
    end case;                     

    特点:可以作为表达式,嵌套在其他语句当中使用,可以放在任何地方;可以作为独立语句,只能放在begin,end中。

案例:

流程控制01

if结构

应用在begin,end中。

语法:

if 条件1 then 语句1;
elseif 条件2 then 语句2;
......
else 语句n
end if;

案例:

流程控制02

流程控制03

循环结构

分类:

  • while
  • loop
  • repeat

循环控制:

  • iterate,类似于continue
  • leave,类似于break

语法:

/*标签:*/ while 循环条件 do
    循环体;
end while /*标签*/;

/*标签:*/ loop
    循环体;
end loop /*标签*/; /*模拟简单的死循环*/ 

/*标签:*/ repeat
    循环体;
until 结束循环的条件
end repeat /*标签*/; 

案例:


文章作者: LogicVan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LogicVan !
评论
  目录