在mysql建名为db_school数据库(InnoDB 类型),和account 表里面字段有
简单介绍存储过程与存储函数:
MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序。与一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。
存储程序就是一条或者多条SQL语句和控制语句的集合,我们可以将其看作MySQL的批处理文件,当然,其作用不仅限于批处理。当想要在不同的应用程序或平台上执行相同的功能一段程序或者封装特定功能时,存储程序是非常有用的。数据库中的存储程序可以看做是面向对编程中面向对象方法,它允许控制数据的访问方式。
存储函数与存储过程有如下区别:
(1)存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的实现功能针对性比较强。
(2)返回值不同。存储函数必须有返回值,且仅返回一个结果值;存储过程可以没有返回值,但是能返回结果集(out,inout)。
(3)调用时的不同。存储函数嵌入在SQL中使用,可以在select 存储函数名(变量值);存储过程通过call语句调用 call 存储过程名。
(4)参数的不同。存储函数的参数类型类似于IN参数,没有类似于OUT和INOUT的参数。存储过程的参数类型有三种,IN、out和INOUT:
a. in:数据只是从外部传入内部使用(值传递),可以是数值也可以是变量
b. out:只允许过程内部使用(不用外部数据),给外部使用的(引用传递:外部的数据会被先清空才会进入到内部),只能是变量
c. inout:外部可以在内部使用,内部修改的也可以给外部使用,典型的引用 传递,只能传递变量。
创建存储过程语法结构如下:
CREATE PROCEDURE 过程名([[IN|OUT|INOUT] 参数名 数据类型, [,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 …]
BEGIN
过程体
END
使用call 过程名() 调用
创建存储函数语法结构如下:
CREATE FUNCTION 函数名([ 参数名 数据类型 [, …]]) RETURNS返回类型
BEGIN
过程体
END
使用select 函数名 调用
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2021/4/28 0028
* Time: 14:41
*/
$link = new mysqli('127.0.0.1', 'root', '123', 'db_school'); // 连接数据库
if(mysqli_connect_errno()){ // 检查连接错误
printf("连接失败:%s<br>", mysqli_connect_error());
exit();
}
//存储函数
//$sql1 = "
// create function cunchu(ids int) returns int
// begin
// return (select cash from account where id=ids);
// end ;
//";
//$sql1 = "
// create function cunchuname(ids int) returns varchar(50)
// begin
// return (select name from account where id=ids);
// end ;
//";
//$result = $link -> query($sql1);
//
//$sql = "select cunchuname(1);";
//$result = $link -> query($sql);
//var_dump(mysqli_fetch_row($result));
//存储过程
$sql = "
create procedure zxc(in snum int,in names varchar(10))
begin
if snum > 800 then
INSERT INTO account (id,name,cash) VALUES (NULL,names,snum);
else
select 'snum < 800 ';
end if;
end;
";
$result = $link -> query($sql);//创建一个zxc的存储过程
$sql = "call zxc(900,'userH');";
$result = $link -> query($sql);
var_dump($result);
$link->close();