一、变量

1.系统变量:

变量由系统定义,不是用户定义,属于服务器层面,包括全局变量、会话变量

(1)查看所有的系统变量:show global | [session] variables;

(2)查看指定的某个系统变量的值:select @@global | [session] .系统变量名;

(3)为某个系统变量赋值:

方式一:set global | [session] 系统变量名=值;

方式二:set @@global | [session] .系统变量名=值;

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

会话变量作用域:仅仅针对当前的会话(连接)有效

2.自定义变量:

变量是用户自定义的,不是由系统定义的

使用步骤:声明、赋值、使用(查看、比较、运算等)

1.用户变量

作用域:针对当前会话(连接)有效,同于会话变量的作用域,应用在任何地方,也就是begin end 里面或begin end外面

(1)声明并初始化


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


(2)赋值(更新用户变量名的值):

方法一:同(1)

方法二:


select 字段 into @变量名
from 表;


(3)使用(查看用户变量的值)


select @用户变量名;


2.局部变量

作用域:仅仅在定义它的begin end 中有效,应用在begin end中的第一句话

(1)声明


declare 变量名 类型;
declare 变量名 类型 default 值;


(2)赋值

方式一:


set 局部变量名=值;或
set 局部变量名:=值;或
select @局部变量名:=值;


方法二:

select 字段 into 局部变量名
from 表;

(3)使用

select 局部变量名;

 

作用域

定义和使用位置

语法

用户变量

当前会话

会话中的任何位置

必须加@符号,不用限定类型

局部变量

begin end中

只能在begin end 中,且为第一句话

一般不用加@符号,需要限定类型

二、存储过程

存储过程:一组预先编译好的sql语句的集合,理解成批处理语句,类似于Java中的方法

好处:1.提高代码的重用性2.简化操作3.减少了编译次数并且减少了和数据库服务器的链接次数,提高了效率

1.创建语法

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

注意:

(1)参数列表包含三部分:参数模式   参数名   参数类型

参数模式:

IN:该参数可以作为输入,需要调用方传入值

OUT:该参数可以作为输出,可以作为返回值

INOUT:既可以作为输入也可以作为输出,既需要传入值,也可以返回值

(2)如果存储过程体仅仅只有一句话,begin end 可以省略

存储过程体中的每条sql语句的结尾要求必须加分号,存储过程的结尾可以使用delimiter重新设置

语法:delimiter 结束标记   e.g.delimiter $

2.调用语法


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


3.删除存储过程

drop procedure 存储过程名;

4.查看存储过程

show create procedure 存储过程名;

三 、函数

存储过程:可以有0个返回,也可以有多个返回,适合做批量插入、批量更新

函数:有且仅有一个返回,适合做处理数据后返回一个结果

1.创建语法

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

begin

     函数体

end

注意:

1.参数列表包含两部分:参数名  参数类型

2.函数体:肯定会有return语句,如果没有会报错;如果return语句没有放在函数的最后面也不报错,但不建议

2.调用语法

select 函数名(参数列表)

3.查看函数

show create function 函数名;

4.删除函数

drop  function 函数名;

四、流程控制结构

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

1.分支结构

(1)if函数

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

执行顺序:如果表达式1成立,则IF函数返回表达式2的值,否则返回表达式3的值

(2)case结构

情况1:类似于java中的switch语句,一般用于实现等值判断语法:

case 变量|表达式|字段
when 要判断的值 then 返回的值1或语句1;
when 要判断的值 then 返回的值2或语句2;
...
else 要返回的值n或语句n;
end case;

情况2:类似于java中的多重IF语句,一般用于实现区间判断

case 
when 要判断的条件1 then 返回的值1或语句1;
when 要判断的条件2 then 返回的值2或语句2;
...
else 要返回的值n或语句n;
end case;

特点:

可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,begin end 中或begin end 外面

可以作为独立的语句去使用,只能放在begin end 中

(3)if结构

功能:实现多重分支,应用在begin end中

if 分支1 then 语句1;
elseif 条件2 then 语句2;
...
[else 语句n;]
end if;

2.循环结构

分类:while、loop、repeat

循环控制:

iterate类似于continue,继续,结束本次循环,继续下一次

leave类似于break,跳出,结束当前所在循环

(1)while

[标签:]while 循环条件 do
       循环体;
end while [标签];

(2)loop:可以用来模拟简单的死循环

[标签:]loop
       循环体;
end loop [标签];

(3)repeat

[标签:]repeat
       循环体;
until 结束循环的条件
end repeat [标签];

MYSQL中存储过程设置变量 mysql存储过程变量定义_sql