mysql存储过程和函数有什么区别

你提到的简历非常好。
这确实使 MySQL 中的存储过程和函数之间的区别变得清晰。
但我必须补充一些我踩过的陷阱。

上周,当我在上海的一个购物中心做一个项目时,我遇到了存储过程和函数的错误使用。
当时有一个需要计算用户评分的需求。
如果操作简单的话,用一个函数就可以了。
只需一行代码: CREATE FUNCTION GetUserPoints(userId INT) RETURNS INT SELECT point FROM users WHERE id = userId;打电话也方便。
只需选择 GetUserPoints(1 001 ) 即可返回结果。

但随后添加了一个复杂的要求。
需要判断用户积分是否达标,是否为VIP,并根据消费记录扣除积分。
这一行动变成了多阶段的。
结果我强迫自己用函数来写,每一步都要单独写,最终导致错误。
后来我很快改用存储过程,用CREATE PROCEDURE CheckUserStatus(IN userId INT, OUT isVIP BOOLEAN, OUT canBuy BOOLEAN)封装所有逻辑,用事务管理扣分就搞定了。

因此,如果您选择了错误的函数和存储过程,后果可能会很严重。
想一想: 1 .函数不能改变数据库的状态,但存储过程可以。
上次客户想使用该功能直接删除记录,但失败了。
这是一个常见的错误。
2 . 存储过程可以返回多个值,但函数不能。
例如,我们的积分系统使用存储过程来返回积分值和状态代码,这比函数方便得多。
3 .还有性能差异。
去年我测试过,在对1 00万条数据进行复杂计算时,存储过程比函数至少快3 倍。
由于函数每次调用时都必须重新编译,因此存储过程在编译后可以多次使用。

现在我们的团队有一个铁定的规则:使用存储的用于基本业务逻辑的程序和用于简单计算的函数。
而且,最好给存储过程添加注释。
上次实习生把扣分逻辑写成了加分,差点酿成大错。

无论如何,选择哪种工具要根据情况而定。
使用函数进行简单计算,使用存储过程进行复杂操作。
但最重要的是,在使用之前,您需要测试功能!

面试官突然问我MySQL存储过程,我竟然连基础都不会!(详细)

结论:存储过程是编译到数据库中的 SQL 语句。
用于提高性能和安全性并降低SQL注入的风险。

1 .1 存储过程是数据库中预先打包的SQL语句的集合,用于提高执行性能。
1 .2 MySQL 存储过程;不支持包和类;仅存储过程。
1 .3 使用存储过程可以提高可维护性,提高数据库与Java的连接性能。
2 .1 存储过程和Java一样,可以封装复杂的逻辑,并提供输入输出参数。
2 .2 存储过程具有预编译、可复用性强的优点,但存在性能瓶颈和维护困难。
2 .3 了解MySQL存储过程的官方文档,但本文会详细解释。
2 .3 存储过程语法:输入关键字,设置输出和参数,修改DELIMITER终止符。
3 .1 局部变量;用户变量;会话变量和全局变量变量。
3 .2 了解输入和输出参数的语法并相应地调整数据库。
4 .1 流程控制:if、case、loop、repeat、while等 4 .2 主控制语句如退出和迭代控制存储过程的执行。
5 .1 游标用于操作数据行。
5 .2 处理程序 处理程序语法用于处理游标。
6 .1 创建日常相关表,实现分表存储。
7 .1 外观处理。
7 .2 无限循环执行。
7 .3 在所选择的陈述中写出真相。
7 .4 复制表格和数据。
7 .5 临时表的使用。