代码执行结构
代码执行结构有三种:顺序结构,分支结构,循环结构
分支结构
准备多个代码块,按照条件选择性的执行
在mysql 中只有if分支
基本语法:
If
判定条件 then
——满足条件要执行的代码
Else
——不满足条件要执行的代码
End
if
循环结构
某段代码在指定的条件下重复执行
While
循环,mysql 中没有for 循环
While
判定条件 do
——满足条件要执行的代码
——变更循环执行的条件
End while
循环控制:在循环内部进行循环的判定和控制
Mysql 中没有 continue和break 关键字 但是有替代品
Iterate :迭代 类似continue
Leave : 离开 类似break
常见:in,any
函数
将一段代码封装到一个结构中,在需要执行这段代码的时候,调用结构
函数分2中:系统函数,自定义函数
系统函数
系统已经定义好的函数,可以直接调用
任何函数都有返回值,因此函数都是通过select调用
Substring()
截取字符串(字符为单位)
select substring(@name,1,2);
char_length
字符长度
select
substring(@name,1,3),substring(@address,1,4),
char_length(@name),char_length(@address),
length(@name),length(@address)
Length
字节长度
select
substring(@name,1,3),substring(@address,1,4),
char_length(@name),char_length(@address),
length(@name),length(@address)
instr
判断字符串是否存在某个自创
存在返回位置,0表示不存在
select instr(@name,substring(@name,1,3));
select instr(substring(@name,1,3),@name);
load
左填充:将字符串按照某种方式进行填充
select lpad(@name,23,“ABC”);
insert
替换
找到目标位置,将指定长度的子串
替换成目标字符串
select insert(@name ,3,2,“qw0”);
strcmp
字符串比较 大于1,等于0,小于-1
select strcmp(@name,@address);
select strcmp(@address,@ address);
select strcmp(@address,@name);
自定义函数
函数的三要素:
函数名称,参数列表(实参形参)
函数体
创建函数
Delimiter xx
Create function 函数名(【形参列表】)
returns 返回类型
Begin
函数体
返回值:returnxxx;
End
Xx
Delimiter ;
Delimiter $$
create function display1() returns int
begin
set
@cnt:=1;
if
@cnt=1 then
return
100;
else
return
1;
end
if;
end
$$
Delimiter ;
调用函数
Select 函数名()
select display1();
查看函数
查看所有的函数
Show
function status【like “pattern”】
查看函数创建语句
Show
create function 函数名
show create function display1 \G;
修改函数&删除函数
函数不能修改,只能删掉重写来
Drop function 函数名
drop function display1;
案例:计算1~X的和。
Delimiter $$
create function display2( x int) returns
int
begin
declare sum1 int default 0;
set
@cnt=1;
while
@cnt<=x do
set
sum1=sum1+@cnt;
set @cnt=@cnt+1;
end while;
return
sum1;
end
$$
Delimiter ;
函数参数
上面的@cnt 都可以在函数外面使用
注意:函数内部使用@定义的变量,在函数外部也可以访问
作用域
Mysql 中作用域和js中作用域是一样的
全局变量可以任何地方定义,
局部变量只能在函数内部定义
全局变量
使用set关键字定义,使用@符号标记
如 @cnt
局部变量
使用declare 关键字声明,没有@符号,
所有的局部变量的声明,必须在函数体开始之前,放在begin下面
如上述 sum1
存储过程
存储过程简称:过程,procedure ,是一种用来处理数据的方式
存储过程是一种没有返回值的函数。
创建过程
Create procedure 过程名称(参数列表)
Begin
过程体
End
delimiter $$
create procedure pro1()
begin
select
- from emp;
end
$$
delimiter ;
查看过程
查看所有过程
Show
procedure status
查看过程创建语句
Show create procedure 过程名称
Show create procedure pro1
调用过程
Call 过程名称
Call pro1
修改过程&&删除过程
过程只能删除,后新增
Drop procedure 过程名称
drop procedure pro1;
过程参数
过程的参数有3中类型
In:数据只是从外部传到内部(值传递)
Out:只允许过程内部是使用(不使用外部值),变量到达内部之后,外部数据被清空,初始为null,只传递了变量
Inout:外部变量可以在内部使用,内部修改之后,外部也被修改
类似于java中引用传递
基本使用
Create procedure 过程名(in 形参名称 数据类型,out 形参名称 数据类型,inout 形参名称 数据类型)
delimiter $$
create procedure pro2(in a1 int ,out a2 int
,inout a3 int)
begin
select
a1,a2,a3;
set
a1=10;
set
a2=100;
set
a3 =100;
select
a1,a2,a3;
select
@a1,@a2,@a3;
set
@a1=‘a’;
set
@a2=‘b’;
set
@a3=‘c’;
select
@a1,@a2,@a3;
end
$$
delimiter ;
set
@a1=1;
set
@a2=2;
set
@a3=3;
select
@a1,@a2,@a3;
call
pro2(@a1,@a2,@a3);
注意在end结束后 out 和inout类型的变量会将过程内的值赋值给外部的变量
属于引用传递
存储过程对一变量的操作的是滞后:是在存储过程结束的时候,才会重新将内部修改的值 赋值给外部传入的全部变量。
最后:是在存储过程调用结束后,系统会将局部变量的值返回给全局变量