(所有需要操作的表都在这里建立:https://blog.csdn.net/qq_44647223/article/details/110249062)
存储过程:提供一种方法,将一些固定的操作集合起来,由数据库服务器来完成,实现某个特定任务。存储过程是存储在数据库服务器中的一组编译成单个执行计划的SQL语句。
使用存储过程的好处:
- 由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化,因而运行效率高,它提供了在服务器端快速执行SQL语句的有效途径。
- 存储过程降低了客户机和服务器之间的通信量,客户机上的应用程序只要通过网络向服务器发出存储过程的名字和参数,就可以让RDBMS执行多条SQL语句,并行数据处理,只将最终结果返回客户端。
- 方便实施企业规则,开发人员可以把企业规则的运算程序写成存储过程放入数据库服务器,由RDBMS管理,既有利于集中控制,又维护方便,当用户规则发生变化时只要修改存储过程,无需修改其他应用程序。
创建存储过程
CREATE PROCEDURE 存储过程名[;版本号]
[{@参数 数据类型}[VARYING] [=默认值][OUTPUT],
...]
[WITH {RECOMPILE|ENCRYPTION|RECOMPILE, ENCRYPTION}]
[FOR REPLICATION]
AS
SQL语句
主要参数作用:
- 存储过程名:存储过程的名称。
- [; 版本号]:把多个同名的存储过程合成一个组
- @参数:存储过程中的参数,可以声明一个或多个参数,但必须在执行存储过程时提供每个参数的值(除非定义了该参数的默认值)
- 数据类型:参数的数据类型
- VARYING:用于存储过程的输出参数为游标的情况
- =默认值:设置参数的默认值,如果定义了默认值,则不必指定该参数的值即可执行存储过程,默认值必须是常量或NULL,也可以包括通配符。
- OUTPUT:表明参数是返回参数。
- RECOMPILE:指明存储过程并驻留过程在内存中,而是在每次执行时重新编译。
- ENCRYPTION:用于对存储创建过程的SQL语句的系统表syscomments进行加密,使其它用户无法查询到存储过程的创建语句。
- FOR REPLICATION:表示存储过程只能在复制过程中执行,和ENCRYPTION不能同时使用。
- SQL语句:存储过程所要执行的操作,它可以是一组SQL语句,可以包含流程控制语句等,但这些SQL语句不能用于创建数据库、视图、表、规则、触发器或其他存储过程,也不能使用USE语句选择其他数据库。
基本的存储过程
(1) 不带参数
DELIMITER $$
CREATE PROCEDURE exp2()
BEGIN
select * FROM stock;
END$$
使用存储过程exp2
CALL exp2;
(2) 带参数
DELIMITER $$
CREATE PROCEDURE exp3(IN mat_num2 varchar(10))
BEGIN
select * FROM stock where mat_num = mat_num2;
END$$
使用exp3存储过程:
CALL exp3('m001')
(3) 带多个参数
DELIMITER $$
CREATE PROCEDURE exp4(IN warehouse2 varchar(10), IN amount2 INT)
BEGIN
select * FROM stock where warehouse = warehouse2 AND amount > amount2;
END$$
使用exp4存储过程:
CALL exp4('1#仓库',10)
修改存储过程
MYSQL不提供存储过程或函数的代码修改,只能修改存储过程或函数的定义,如果一定要修改存储过程或函数的代码,需要删除原来的代码,并创建新的同名存储过程
删除存储过程
DROP PROCEDURE name; ---name:存储过程
删除exp3存储过程