MySQL变量,存储过程,流程结构

变量

系统变量:由系统提供,属于服务层面
_全局变量:_服务器每次启动将为所有全局变量赋初值。针对所有会话(连接)有效,但不能跨重启。
_会话变量:_仅仅针对于当前的会话(连接)有效。
查看所有的系统变量:show global | [ session] variable;
查看满足条件的系统变量:show global | [session] variable like ‘%char%’;
查看指定系统变量:select @@global | [session].系统变量名;
为某个系统变量赋值:
set global | [session] 系统变量名=值;
set @@global \ [session].系统变量名=值;

自定义变量:用户自定义
_用户变量:_针对于当前会话(连接)有效
1.声明并初始化
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;
2.赋值
set @用户变量名=值;
set @用户变量名:=值;
select @用户变量名:=值;
select into select 字段 into 变量名 from 表;
_局部变量:_仅仅在定义它的begin end中有效
1.声明
declare 变量 类型 [default 值];
2.赋值
与用户变量相同

存储过程

事先经过编译并存储在数据库中一组完成特定功能的sql语句的集合。就是数据库 SQL 语言层面的代码封装与重用。
好处:
1.提高了代码的重用性;
2.简化操作;
3.减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/*
一、创建存储过程
语法:
create procedure 存储过程名(参数列表)
begin
存储过程体
end

1、参数列表分为:参数模式 参数名 参数类型
参数模式:
in:该参数可以作为输入,也就是说该参数需要调用方传入值
out:该参数可以作为输出,也就是说该参数可以作为返回值
inout:该参数既可以作为输入也可以作为输入

二、调用存储过程
语法:
call 储存过程名(实参列表);
*/

CREATE PROCEDURE myp1()
BEGIN
INSERT INTO admin(username,`password`)
VALUES("Taylor","123456"),("Tom","123456"),("Jerry","123456");
END

CALL myp1;

# 创建带in模式参数的储存过程
# 创建存储过程判断用户是否登录成功
CREATE PROCEDURE myp2(IN username VARCHAR(10),IN `password` VARCHAR(10))
BEGIN
DECLARE result INT DEFAULT(0);
SELECT COUNT(*) INTO result
FROM admin WHERE admin.username=username AND admin.`password`=`password`;
SELECT IF(result>0,"成功","失败");
END

CALL myp2("Taylor","123456");

# 创建带out模式参数的储存过程
CREATE PROCEDURE myp3(IN username VARCHAR(10),IN `password` VARCHAR(10),OUT result char(5))
BEGIN
DECLARE result1 INT DEFAULT(0);
SELECT COUNT(*) INTO result1
FROM admin WHERE admin.username=username AND admin.`password`=`password`;
SET result = IF(result1>0,"true","false");
END

CALL myp3("Taylor","123456",@result);
SELECT @result;

# 三、删除储存过程
DROP PROCEDURE myp3;

# 四、查看储存过程
SHOW CREATE PROCEDURE myp2;

函数

与储存过程的区别:
储存过程:可以有0个或多个返回值,适合批量插入、批量更新
函数:有且仅有一个返回值,适合处理数据后返回一个结果。

1
2
3
4
5
6
7
8
# 创建函数
/*
语法:
create function 函数名(参数列表) returns 返回类型
begin
函数体
end
*/

流程控制结构

if函数:
if(表达式1,表达式2,表达式3):如果表达式1成立,返回表达式2的值,否则返回表达式3的值。

case结构:
case 变量|表达式|字段
when条件1或值 then 要返回的值或要执行的语句;
when条件2或值 then 要返回的值或要执行的语句;
when条件3或值 then 要返回的值或要执行的语句;
……
else 要返回的值或要执行的语句;
end case;

if结构:
if 条件1 then 语句1;
elif 条件2 then 语句2;
……
else then 语句n;
end if;

循环结构:
分类:while , loop , repeat
循环控制:
iterate 类似于 continue ,继续,结束本次循环继续下一次
leavele 类似于 break ,跳出 ,结束当前所在循环
1.while

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

2.loop

1
2
3
[标签:]loop 
循环体;
end loop [标签]

3.repeat

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