mysql存储过程与函数

mysql存储过程与函数

存储过程的创建与调用

准备工作:

CREATE DATABASE dbtest15;
USE dbtest15;
CREATE TABLE employees
AS SELECT * FROM atguigudb.`employees`
CREATE TABLE departments
AS 
SELECT * FROM atguigudb.`departments`;
SELECT * FROM employees;
SELECT * FROM departments;

类型一:无参数并且无返回值

创建存储过程:
在这里插入图片描述
存储过程的调用:
CALL select_all_data()
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

类型二:带OUT

创建存储过程:
在这里插入图片描述
调用:
CALL show_min_salary(@ms);
查看变量值:
SELECT @ms
在这里插入图片描述

类型三:带IN

在这里插入图片描述
调用方式一:
CALL show_someone_salary('Abel');
调用方式二:
SET @empname = 'Abel';
CALL show_someone_salary(@empname);
在这里插入图片描述

类型四:带IN和OUT

创建存储过程:
在这里插入图片描述
调用:
SET @empname = 'Abel'
CALL show_someone_salary2(@empname,@empsalary);
SELECT @empsalary
在这里插入图片描述

类型五:带INOUT

创建存储过程:
在这里插入图片描述
在这里插入图片描述
SET @empname = 'Abel';
CALL show_mgr_name(@empname);
SELECT @empname;
在这里插入图片描述

存储函数的创建与调用

若在创建存储函数中报错you might want to use the less safe log_bin_trust_function_creatorsvariable有两种处理方法:

  • 方式一:加上必要的函数特性
    在这里插入图片描述

  • 方式二:
    在这里插入图片描述
    调用:
    SELECT email_by_name();
    在这里插入图片描述
    在这里插入图片描述
    SELECT email_by_id(101)
    在这里插入图片描述
    在这里插入图片描述
    SET @dept_id = 30;
    SELECT count_by_id(@dept_id)
    在这里插入图片描述

对比存储函数和存储过程

在这里插入图片描述
存储函数可以放在查询语句中使用,存储过程不行。
存储过程的功能更加强大,包括能够执行对表的操作(比如创建表,删除表等)和事务操作,这些功能是存储函数不具备的。

存储过程和函数的查看修改和删除

查看

使用SHOW CREATE语句查看存储过程和函数的创建信息

SHOW CREATE PROCEDURE show_mgr_name;
在这里插入图片描述
在这里插入图片描述

使用SHOW STATUS语句查看存储过程和函数的状态信息

SHOW PROCUDURE STATUS
在这里插入图片描述
SHOW PROCUDURE STATUS LIKE 'show_max_salary';
在这里插入图片描述
SHOW FUNCTION STATUS LIKE 'show_max_salary';
在这里插入图片描述

从information_schema.Routines表中查看存储过程和函数的信息

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='email_by_id AND ROUTINE_TYPE = 'FUNCTION';
在这里插入图片描述

修改

在这里插入图片描述

删除

在这里插入图片描述

关于存储过程使用的争议

优点:
在这里插入图片描述
缺点:
在这里插入图片描述
在这里插入图片描述

课后练习

1.创建存储过程insert user() ,实现传入用户名和密码,插入到admin表中

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.创建存储过程get_phone(),实现传入女神编号,返回女神姓名和女神电话
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.创建存储过程date_ diff(), 实现传入两个女神生日,返回日期间隔大小
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.创建存储过程format_ date(), 实现传入-一个日期,格式化成xx年xx月xx日并返回
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5.创建存储过程beauty
limit(), 根据传入的起始索引和条目数,查询女神表的记录
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6.创建带inout模式参数的存储过程,传入a和b两个值,最终a和b都翻倍并返回。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
7.删除题目5的存储过程
在这里插入图片描述
8.查看题目6中存储过程的信息
在这里插入图片描述
1.创建函数get_ count(), 返回公司的员工个数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2.创建函数ename_ salary(), 根据员工姓名,返回它的工资
在这里插入图片描述
3.创建函数dept_ sal() , 根据部门名,返回该部门的平均工资
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建函数add_ float(), 实现传入两个float,返回二者之和

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙崎流河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值