mysql存储过程和函数
1、通常,函数要明确地返回一个结果值;而过程不用。
然而,事实上可以通过OUTPUT参数来返回多个值
*2、函数不会改变系统的状态(及数据),而过程可能会改变。
即相同的参数值传入,函数返回的结果每次都是相同的;但过程并不一定。
因此,
3、函数中,不能使用会改变系统状态及数据的语句,如DELETE、UPDATE、INSERT、ALTER
② mysql存储过程怎么写
MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。下面我们来介绍一下如何创建一个存储过程。
语法格式:
可以使用 CREATE PROCEDURE 语句创建存储过程。
语法格式如下:
CREATE PROCEDURE <过程名> ( [过程参数[,?] ] ) <过程体>
[过程参数[,?] ] 格式
[ IN | OUT | INOUT ] <参数名> <类型>语法说明如下:
1) 过程名
存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。
2) 过程参数
存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。
MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。
3) 过程体
存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。
在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。
在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。为解决这个问题,通常可使用 DELIMITER 命令将结束命令修改为其他字符。
语法格式如下:
DELIMITER $$语法说明如下:$$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。当使用 DELIMITER 命令时,应该避免使用反斜杠“”字符,因为它是 MySQL 的转义字符。
在 MySQL 命令行客户端输入如下SQL语句。
mysql > DELIMITER ??成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。
若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:
mysql > DELIMITER ;注意:DELIMITER 和分号“;”之间一定要有一个空格。在创建存储过程时,必须具有 CREATE ROUTINE 权限。可以使用 SHOW PROCEDURE STATUS 命令查看数据库中存在哪些存储过程,若要查看某个存储过程的具体信息,则可以使用 SHOW CREATE PROCEDURE <存储过程名>。
创建不带参数的存储过程
存储过程的作用是从学生成绩信息表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。
mysql> DELIMITER //
mysql> CREATE PROCEDURE ShowStuScore()
-> BEGIN
-> SELECT * FROM tb_students_score;
-> END //
Query OK, 0 rows affected (0.09 sec)
③ mysql中函数和存储过程的区别
存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
存储过程和函数存在以下几个区别:
1)一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。存储过程,功能强大,可以执行包括修改表等一系列数据库操作;用户定义函数不能用于执行一组修改全局数据库状态的操作。
2)对于存储过程来说可以返回参数,如记录集,而函数只能返回值或者表对象。函数只能返回一个变量;而存储过程可以返回多个。存储过程的参数可以有IN,OUT,INOUT三种类型,而函数只能有IN类~~存储过程声明时不需要返回类型,而函数声明时需要描述返回类型,且函数体中必须包含一个有效的RETURN语句。
3)存储过程,可以使用非确定函数,不允许在用户定义函数主体中内置非确定函数。
4)存储过程一般是作为一个独立的部分来执行( EXECUTE 语句执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。 SQL语句中不可用存储过程,而可以使用函数。
④ 在mysql中,存储过程和函数的主要区别是函数可以返回一个值,而存储过程不能。
答案:
在MySQL中,存储过程和函数的主要区别在于函数可以返回一个值,而存储过程则不能。下面将详细解释这一区别以及其他相关点。
存储过程与函数的区别:
1. 返回值差异:函数的主要特点是它可以返回一个值,这个值可以是单一结果集、一个数值或者一个字符串等。而存储过程则不直接返回值,它主要是通过输出参数来传递结果。存储过程可以包含多个输出参数,用于返回多个结果或状态信息。
2. 使用场景不同:存储过程通常用于执行一系列复杂的操作或修改数据库中的数据,而函数则更多地用于计算或返回某个特定的数据值。由于函数可以返回结果,因此在查询语句中可以直接使用函数来简化操作或得到计算结果。
3. 声明方式差异:在MySQL中,创建函数需要使用“CREATE FUNCTION”语句,而创建存储过程则使用“CREATE PROCEDURE”语句。此外,函数可以在SQL查询中直接调用,而存储过程则需要通过“CALL”语句来调用执行。
4. 性能考量:虽然函数在某些情况下可以提供便利,但在处理大量数据时,由于函数调用可能需要额外的处理时间,可能会影响到查询性能。而存储过程由于其执行流程的控制和优化,可能在处理复杂逻辑和大量数据时表现出更高的性能。
综上所述,虽然存储过程和函数在MySQL中都用于封装代码逻辑,但由于它们的设计目的和使用场景不同,因此在返回值、使用方式、性能等方面存在差异。在实际应用中,应根据具体需求和场景选择合适的工具。
⑤ MySQL存储函数和存储过程的区别
区别主要在于:
1、存储过程没有返回值,而函数必须有返回值;
2、存储过程的参数可以是IN、OUT、INOUT类型,而函数的参数只能是IN类型。