一、变量
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 [标签];