辨析存储过程与函数

大家好,我是一只学弱狗,记录学习的点点滴滴!

优质文章

优质专栏


前面我们学习了Mysql变量,今天我们来了解下Mysql中的存储过程函数,这两者既有相同点,又有所差异,接下来,我们就来说说它们的庐山真面目吧!

学过其它程序设计语言,像Java、C++的读者应该都知道,对于这些程序设计语言而言,函数是非常重要的,它不仅简化了操作,而且也提高了代码的重用性,同样的,存储过程和函数的作用也是如此,在上面两点的基础上,它们减少了编译次数且减少了和数据库服务器的连接次数,提高了效率,其在Mysql中的重要性也是占有一定地位的,那好,我们先来看下存储过程

存储过程
含义

存储过程是一组预先编译好的SQL语句的集合,可以理解成批处理语句,可以有零个或多个返回,适合做批量插入,批量更新

创建语法
create procedure 存储过程名(参数模式 参数名 参数类型)
begin
	存储过程体(一组合法的SQL语句)
end

参数模式

  1. IN:该参数模式可以作为输入,即该参数需要调用方传入值
  2. OUT:该参数模式可以作为输出,即该参数可以作为返回值
  3. INOUT:该参数模式既可以作为输入又可以作为输出,即该参数模式既需要传入值,又可以返回值

  1. 若存储过程体中仅仅只有一条SQL语句,begin end可以省略
  2. 存储过程体中的每条SQL语句的结尾要求必须加分号
  3. 存储过程的结尾可以使用delimiter重新设置,详见百度经验
调用语法
call 存储过程名(实参列表);

我们来举四个分别为空参带IN参数模式带OUT参数模式带INOUT参数模式的案例,让大家来进一步了解下存储过程
案例一(空参):创建表admin,并向其中插入五条记录

DROP TABLE IF EXISTS admin;#若表admin存在,则删除
CREATE TABLE IF NOT EXISTS admin(#若表admin不存在,则创建
 id INT PRIMARY KEY AUTO_INCREMENT,#设置字段id的约束条件为主键且为自增长列
 username VARCHAR(20),
 PASSWORD VARCHAR(20)
);
DELIMITER //#设置存储过程的的结束符为//,与;区分
CREATE PROCEDURE test_1()#创建存储过程test_1
BEGIN
 INSERT INTO admin(username,PASSWORD)
 VALUES('John1','1111'),('John2','2222'),('John3','3333'),('John4','4444'),('John5','5555');
END //
CALL test_1();#调用存储过程test_1
SELECT * FROM admin;

上述代码执行后,结果如下
案例一
案例二(带IN参数模式):传入用户名和密码,验证是否可登陆成功(即表admin中是否存在传入的用户名和密码的记录)

DROP PROCEDURE test_2;//删除存储过程test_2
DELIMITER //
CREATE PROCEDURE test_2(IN username VARCHAR(20),IN PASSWORD VARCHAR(20))
BEGIN
 DECLARE num INT DEFAULT 0;#创建局部变量num并赋默认值为0
 SELECT COUNT(*) INTO num
 FROM admin AS a
 WHERE a.username=username
 AND a.password=PASSWORD;
 SELECT IF(num<>0,'成功','失败') AS 结果;
END //

以上步骤执行之后,我们来测试下,执行下面的代码

CALL test_2('John1','1111');

结果如图
案例二
我们来测试个失败的案例,执行下面的代码

CALL test_2('Ace','9999');

结果如图
案例二
案例三(带OUT参数模式):传入用户名,返回密码

DROP PROCEDURE test_3;#创建存储过程test_3
DELIMITER //
CREATE PROCEDURE test_3(IN username VARCHAR(20),OUT PASSWORD VARCHAR(20))
BEGIN
 SELECT a.password INTO PASSWORD
 FROM admin AS a
 WHERE a.username=username;
END //

执行完上述代码后,我们来测试下,代码如下

SET @username='John3';#创建用户变量username并初始化为'John3'
CALL test_3(@username,@password);#调用存储过程test_3
SELECT @password;

结果如图
案例三
再来测试下失败的案例,代码如下

SET @username='John';
CALL test_3(@username,@password);
SELECT @password;

结果如图
案例三

案例四(带INOUT参数模式):传入a和b两个值,最终a和b都翻倍并退出

DELIMITER //
CREATE PROCEDURE test_4(INOUT a INT,INOUT b INT)
BEGIN
 SET a=a*2;
 SET b=b*2;
END //

我们测试它,如下代码

SET @a=2;
SET @b=4;
CALL test_4(@a,@b);
SELECT @a,@b;

结果如图
案例四

删除
DROP PROCEDURE 存储过程名;
查看结构
SHOW CREATE PROCEDURE 存储过程名;

经过上面四个案例的介绍之后,我想大家对存储过程的创建、使用、删除等操作也有了一定的了解,加下来,我们来看函数

函数
含义

函数是一组预先编译好的SQL语句的集合,可以理解成批处理语句,有且仅有一个返回,适合做处理数据后返回一个结果

创建语法
create function 函数名(参数名 参数类型) returns 返回类型
begin
	函数体 
end

  1. 函数体中必须有return语句,且建议放在函数体的最后
  2. 函数体中仅有一条SQL语句时,则可以省略begin end
  3. 使用delimiter语句重新设置结束标记
调用语法
SELECT 函数名 (实参列表)

跟存储过程一样,我们也来做做个案例
案例创建函数,实现传入两个float值,返回两者之和

DROP FUNCTION test_5;
DELIMITER //
CREATE FUNCTION test_5(m INT,n INT) RETURNS INT
BEGIN
 DECLARE SUM INT;
 SET SUM=m+n;
 RETURN SUM;
END //

执行上述代码后,我们测试

SET @m=6.5;
SET @n=3.5;
SELECT test_5(@m,@n) AS 结果;

结果如下
案例

删除
DROP FUNCTION 函数名;
查看结构
SHOW CREATE FUNCTION 函数名;

号,关于存储过程和函数我们今天就介绍到这里了!!!

颜色与物质浓度的辨析是一种数学建模的问题,而MATLAB是一种强大的数学建模工具。在这个问题中,我们可以使用MATLAB来通过颜色信息来估计物质浓度。 首先,我们需要获取一些颜色数据和相应的物质浓度数据。可以通过实验或者其他方法获取这些数据,并将它们以数字形式存储在MATLAB中。 然后,我们可以使用MATLAB的分析和处理函数来对这些数据进行处理。我们可以使用图像处理工具箱中的函数来提取颜色信息,并将其转换成数值形式。例如,我们可以使用RGB颜色空间将颜色转换为数值,或者使用HSB颜色空间中的亮度通道来估计亮度。 接着,我们可以使用回归分析或者其他数学方法来建立颜色和物质浓度之间的关系。我们可以使用MATLAB中的拟合函数来拟合这些数据,并根据拟合的曲线来估计物质浓度。可以选择合适的回归模型进行拟合,如线性回归、多项式回归或者非线性回归。 最后,我们可以使用MATLAB绘图工具来可视化我们的结果。我们可以绘制颜色和物质浓度之间的散点图,并使用拟合曲线来展示它们之间的关系。这将帮助我们直观地理解颜色和物质浓度之间的关系,并从中得出预测物质浓度的方法。 综上所述,使用MATLAB进行颜色和物质浓度辨析的数学建模可以帮助我们得出物质浓度的估计,并帮助我们理解颜色与物质浓度之间的关系。这个方法可以在实际应用中发挥重要作用,比如在化学、环境科学等领域中对物质浓度进行估计和监测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只学弱狗!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值