mysql编程 mysql中的变量 (存储)函数 存储过程

mysql中的变量:
mysql中,有两种变量形式:
普通变量: 不带“@”符号;
定义形式:
declare 变量名 类型名 【default 默认值】; //普通变量必须先这样定义
赋值形式:
set 变量名 = 值;
取值:就直接使用变量名;

使用“场所”:只能在“编程环境”中使用;
什么是编程环境?只有3个:
1,定义函数的内部;
2,定义存储过程的内部;
3,定义触发器的内部;

会话变量: 带“@”符号;
定义形式(其实也是赋值形式):
set @变量名 = 值; //跟php类似,无需定义,直接赋值,第一次就算是定义
取值:就直接使用变量名;
使用“场所”:基本上哪里都可以用;

变量赋值有如下形式:
语法1(针对普通变量):
set 变量名 = 表达式;#此语法中的变量必须先使用declare声明
语法2(针对会话变量):
set @变量名 = 表达式; #此方式可以无需declare语法声明,而是直接赋值,类似php定义变量并赋值。
语法3(针对会话变量):
select @变量名 := 表达式;#此语句会给该变量赋值,同时还会作为一个select语句输出“结果集”。
语法4(针对会话变量):
select 表达式 into @变量名;#此语句虽然看起来是select语句,但其实并不输出“结果集”,而只是给变量赋值。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(存储)函数:
函数,也说成“存储函数”,其实就是js或php中所说的函数!
唯一的区别:
这里的函数必须返回一个数据(值);
定义形式:
在这里插入图片描述
注意事项:
1, 在函数内容,可以有各种变量和流程控制的使用;
2, 在函数内部,也可以有各种增删改语句;
3, 在函数内部,不可以有select或其他“返回结果集”的查询类语句;
举例:
在这里插入图片描述
调用形式:
跟调用内部函数一样!比如:
select now(), 8+3 as f2, func1(); //这里,now()是系统函数; func1()是自定义函数。
或如果在编程语句中:
set @v1 = now();
set @v2 = func1();
在这里插入图片描述
删除函数:
drop function 函数名;

存储过程procedure
存储过程,其本质还是函数——但其规定:不能有返回值;
定义形式:
在这里插入图片描述
说明:
1,in:用于设定该变量是用来“接收实参数据”的,即“传入”;默认不写,就是in
2,out:用于设定该变量是用来“存储存储过程中的数据”的,即“传出”,即函数中必须对他赋值;
3,inout:是in和out的结合,具有双向作用;
4,对于,out和inout设定,对应的实参,就“必须”是一个变量,因为该变量是用于“接收传出数据”;
调用存储过程:
call 存储过程名 (实参1,实参2,… )

它应该是在“非编程环境中”调用,即执行增删改查的场景下;

举例1:
#创建一个存储过程:
#该存储过程的目标是:将3个数据写入到表tab_int;
#并返回该表的第一个字段的前3大值的行
在这里插入图片描述
调用:
在这里插入图片描述
举例2(使用in,out,inout):
在这里插入图片描述
下面使用正确调用方法:
在这里插入图片描述
删除存储过程:
drop procedure 存储过程名;

在php中使用存储函数或存储过程的示意

<php
//调用存储函数:
$v1 = $_POST[‘a’];
$v2 = $_POST[‘b’];
$sql = “insert  into  tab1  (id,  f2,  f3)  values ( null,  now(),  func1($v1 , $v2 )  )”;
$result  =  mysql_query($sql);


//调用存储过程:
$v1 = $_POST[‘username’];
$v2 = $_POST[‘pass’];
$v3 = $_POST[‘age’];
$sql = “ call   insert_user($v1, $v2,  $v3 ); ”;	//insert_user()是一个存储过程,带3个参数,会将该3个参数数据写入(insert)某个表中。
$result = mysql_query();

另一个使用存储过程返回结果集的例子:
$id = $_GET[‘id’];
$sql = “call  Get_User_Info( $id )  “;	//Get_User_Info()是一个存储过程,其中会返回某个指定id的用户信息
$result = mysql_query($sql);		//这里得到的就是“结果集”了
?>

猜你喜欢

转载自blog.csdn.net/qq_37171379/article/details/86766260