基本信息
文件名称:《MySQL数据库应用与管理项目化教程》课件_项目7-3 存储过程.pptx
文件大小:716.17 KB
总页数:25 页
更新时间:2025-03-06
总字数:约8.19千字
文档摘要

项目七-3存储过程和函数

任务目标

任务一创建存储过程和函数

任务二查看存储过程和函数

任务三 编程语法与流程控制

任务四 修改存储过程和函数

任务六删除存储过程和函数

创建存储过程和函数

主要内容:

创建存储过程

创建存储函数

重点难点:

设计和应用;

存储过程和函数应用

引入:

db_shop系统中要完成一个购买商品的订单的处理,一般需要考虑以下几步:

(1)在生成订单之前,首先需要查看商品库存中是否有相应商品;

(2)如果商品库存中不存在相应商品,需要向供应商订货;

(3)如果商品库存中存在相应商品,需要预定商品,并修改库存数量。

针对表的一个完整事务操作往往不是单条SQL语句就能实现的,而是需要一组SQL语句来实现。

可将一个完整事务操作中所包含的多条SQL语句创建为存储过程或函数,以方便应用。

存储过程和函数作用

存储过程和函数

可以简单地理解为一组经过编译并保存在数据库中的SQL语句的集合,可以随时被调用。

作用

模块化使用。将复杂的工作程序写成存储过程和函数,以后可通过带入不同的参数或不带参重复调用,大大方便了用户的使用。

执行效率高。存储过程和函数,执行多次时速度快。

降低网络流量。存储过程是存在服务器端、并在服务器端执行,调用执行时用一个EXECUTE指令来代替存储过程内所包含的大量SQL语句的传输,大大降低了网络流量。

安全性。当数据表需要保密时,可以利用存储过程来作为数据存取的管道,来控制用户对数据库信息访问的权限。

存储过程创建

查阅语法:

官网文档:/doc/refman/8.0/en/create-procedure.html

CREATE

[DEFINER=user]

PROCEDUREsp_name([proc_parameter[,...]])

[characteristic...]routine_body

characteristic:

COMMENTstring

|LANGUAGESQL

|[NOT]DETERMINISTIC

|{CONTAINSSQL|NOSQL|READSSQLDATA|MODIFIESSQLDATA}

|SQLSECURITY{DEFINER|INVOKER}

routine_body:

ValidSQLroutinestatement

存储过程创建

创建基本语法:

CREATEPROCEDUREproc_name([IN|OUT|INOUT]param_nametype[,…])

BEGIN

语句体(包括变量声明、控制语句、SQL语句)

END

说明:

IN|OUT|INOUT表示:输入参数、输出参数、输入输出参数。

语句体以BEGIN......END括住,每一个语句都要用分号“;”结尾。

由于存储过程内部语句要以分号结束,需要在定义存储过程前,用delimiter关键字定义其他字符作为结束标志。

存储过程调用

调用基本语法:

CALLsp_name([parameter[,...]])

CALLsp_name[()]

存储过程应用

使用不带参数的存储过程

mysqldelimiter$$--改变MySQLdelimiter为:“//”改变命令提交执行的标志符号,默认情况下,delimiter是分号;

mysqlCREATEPROCEDUREp_search()

BEGIN

SELECT*FROMgoods;

END$$

mysqldelimiter;--改回默认的MySQLdelimiter:“;”

mysqlCALLp_Search();

存储过程应用

使用带输入(IN)参数的存储过程

mysqldelimiter//--改变MySQLdelimiter为:“//”

mysqlCREATEPROCEDUREp_staferSearch(INsidCHAR(5))

BEGIN

SELECT*FROMstafferWHEREstaff_id=sid;

END//

mysqldelimiter;--改回默认的MySQLdelimiter:“;”

mysqlCALLp_staferSearch(10503);

存储过程应用

使用带输入(IN)参数和输出(OUT)参数的存储过程

mysqlDELIMITER//--改变MySQLdelimiter为:“//”

mysqlCREATEPROCEDUREp_c