代码执行结构,函数,存储过程

代码执行结构

代码执行结构有三种:顺序结构,分支结构,循环结构

分支结构

准备多个代码块,按照条件选择性的执行

在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类型的变量会将过程内的值赋值给外部的变量

属于引用传递

存储过程对一变量的操作的是滞后:是在存储过程结束的时候,才会重新将内部修改的值  赋值给外部传入的全部变量。

最后:是在存储过程调用结束后,系统会将局部变量的值返回给全局变量

猜你喜欢

转载自blog.csdn.net/simple_start/article/details/89162439
今日推荐