存储过程-入门
2021-07-23 本文已影响0人
余于鱼不是鱼鱼鱼
存储过程(Stored Procedure)就是一组可编程的函数,为了完成特定功能的sql语句集,通过编译创建保存在数据库字典中。通过指定的名称和参数调用
存储过程(procedure)VS函数(function)
与存储过程类似,函数也是通过一条或多条sql组成的子程序,通过编译创建保存在数据库中,通过指定函数名和参数调用
存储过程(procedure) | VS函数(function) |
---|---|
使用procedure创建 | 使用function创建 |
创建时不需要声明返回值,可以通过out返回零到多个值 | 创建时需要声明返回值,且返回值只有一个 |
可作为独立的PL(Procedure Language过程语言)/SQL执行 | 不能独立执行,必须作为表达式的一部分执行 |
优缺点
-
优点:
- 增强SQL语句功能和灵活性
- 一次创建多次调用
-
缺点:
- 移植性差
- 开发调试复杂
创建一个存储过程
创建一个存储引擎,给指定员工加薪
![](https://img.haomeiwen.com/i26679912/8b831976feb99b1e.png)
语法:
CREATE PROCEDURE 存储过程名称( [IN/OUT/INOUT 参数名 参数类型] )
BEGIN
过程体...
END
结束符
存储过程的参数类型有3种
IN:表示传入参数(入参),存储过程参数默认类型(即不指定参数类型就是IN)
OUT:返回值(出参),通过调用存储过程改变其值
INOUT:即是入参也是出参
创建存储过程
delimiter //
CREATE PROCEDURE raiseSalary ( IN employ_id INTEGER, IN raise_amount DECIMAL )
BEGIN
UPDATE `employ`
SET `salary` = `salary` + raise_amount
WHERE
`id` = employ_id;
END
//
delimiter ;
使用delimiter //命令的作用是将结束符号";"零时改为"//",在创建完存储过程时,使用delimiter ;命令将结束符号还原
查看存储过程
// 查看创建的存储过程
SELECT name,type from mysql.proc WHERE name='raiseSalary'
调用
存储过程通过关键字call调用
![](https://img.haomeiwen.com/i26679912/aefb160d52c04682.png)
语法:CALL 存储过程名([参数.......])
call raiseSalary(52456456,100);
删除
语法:DROP PROCEDURE [ IF EXISTS ] <过程名>
drop procedure raiseSalary;