MySQL——存储过程与存储函数

一、存储过程与存储函数

1、概念

存储过程与存储函数:MySQL中提供存储过程与存储函数机制,我们姑且将存储过程和存储函数合称为存储程序。与一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。

2、存储函数与存储过程区别

  • 存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的实现功能针对性比较强。

  • 返回值不同。存储函数必须有返回值,且仅返回一个结果值;存储过程可以没有返回值,但是能返回结果集(out,inout)。

  • 调用时的不同。存储函数嵌入在SQL中使用,可以在select 存储函数名(变量值);存储过程通过call语句调用 call 存储过程名。

  • 参数的不同。存储函数的参数类型类似于IN参数,没有类似于OUT和INOUT的参数。存储过程的参数类型有三种,IN、out和INOUT;in:数据只是从外部传入内部使用(值传递),可以是数值也可以是变量;out:只允许过程内部使用(不用外部数据),给外部使用的(引用传递:外部的数据会被先清空才会进入到内部),只能是变量;inout:外部可以在内部使用,内部修改的也可以给外部使用,典型的引用 传递,只能传递变量。

二、创建存储过程与存储函数

1、创建存储过程

语法:

CREATE PROCEDURE  过程名([[IN|OUT|INOUT] 参数名 数据类型[,[IN|OUT|INOUT] 参数名 数据类型…]]) [特性 ...]
BEGIN    
过程体
END

创建一个名为count_of_student的存储过程,统计student表的字数

delimiter 
$$#如果已经存在这个存储过程名字的话,丢弃掉这个存储过程。
DROP PROCEDURE IF EXISTS count_of_student $$
create procedure count_of_student(OUT count_num INT)
reads sql data
begin
select count(*) into count_num from student;
end$$

2、创建存储函数

语法:

CREATE FUNCTION function_name(param1,param2,…)
RETURNS datatype
[NOT] DETERMINISTIC statements
SQL

创建一个名为t_employee的数据表并插入记录

CREATE TABLE t_employee(
id INT(4),
name VARCHAR(20),
gender VARCHAR(6),
age INT(4),
salary INT(6),
deptno INT(4));
use mydatabases;
INSERT INTO t_employee(id,name,gender,age,salary,deptno)
VALUES (1001,'Alici Florric','Female',33,1000,1),
(1002,'Kalinda Sharma','Female',31,9000,1),
(1003,'Cary Agos','Male',27,9000,1),
(1004,'Eli Gold','Male',44,9000,2),
(1005,'Peter Florric','Male',24,7000,3),
(1006,'Diane Lockhart','Female',34,8000,3),
(1007,'Maia Rindell','Female',25,9000,2);

创建一个名为func_employee的函数,该函数拥有一个类型为INT(4)并且名为id的参数,返回值为INT(6)类型。SELECT语句从表t_employee中查询字段id值等于所传入参数id值的记录,同时将该记录的字段salary的值返回。

CREATE FUNCTION func_employee(id INT(4))
        RETURNS INT(6)
COMMENT '查询每个员工工资'
BEGIN
RETURN (SELECT salary
    FROM t_employee
    WHERE t_employee.id=id);
END;
$$

三、调用存储过程与存储函数    

1、调用存储过程

使用CALL语句来都调用存储过程,语法如下:

CALL sp_name([parameter[,……]]);

2、调用存储函数

SELECT function_name([parater[,……]]);

3、查看存储过程与存储函数    

(1)、SHOW STATUS语句

SHOW {PROCEDURE | FUNCTION}STATUS[LIKE 'pattern']

(2)、SHOW CREATE语句

SHOW CREATE{PROCEDURE | FUNCTION}sp_name;

4、修改存储过程与存储函数    

修改存储过程和存储函数语法

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic …]

  • sp_name表示存储过程或函数的名称

  • characteristic参数指定存储过程或函数的特性

5、删除存储过程与存储函数    

语法:

DROP {PROCEDURE | FUNCTION } [IF EXISTS] sp_name

你可能感兴趣的:(MySQL,mysql,sql,数据库)