MySQL:MySQL 存储过程

MySQL:MySQL 存储过程MySQL存储过程(了解)1什么是存储过程MySQL5.0版本开始支持存储过程存储过程(StoredProcedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象

大家好,又见面了,我是你们的朋友全栈君。

MySQL 存储过程(了解)

 

1 什么是存储过程

  • MySQL 5.0 版本开始支持存储过程
  • 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据 库对象。
  • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过 指定存储过程的名字并给定参数(需要时)来调用执行。
  • 简单理解: 存储过程其实就是一堆 SQL 语句的合并。中间加入了一些逻辑控制

 

2 存储过程的优缺点

优点:

  <1>存储过程一旦调试完成后,就可以稳定运行,(前提是,业务需求要相对稳定,没有变化)

  <2>存储过程减少业务系统与数据库的交互,降低耦合,数据库交互更加快捷(应用服务器,与 数据库服务器不在同一个地区)

 

缺点:

  <1> 在互联网行业中,大量使用MySQL,MySQL的存储过程与Oracle的相比较弱,所以较少使用,并且互联网行业需求变化较快也是原因之一

  <2> 尽量在简单的逻辑中使用,存储过程移植十分困难,数据库集群环境,保证各个库之间存储 过程变更一致也十分困难。

  <3> 阿里的代码规范里也提出了禁止使用存储过程,存储过程维护起来的确麻烦;

   <span role="heading" aria-level="2"> MySQL:MySQL 存储过程

 

 

 

3 存储过程的创建方式

方式1

1) 数据准备

创建商品表 与 订单表

# 商品表
CREATE TABLE goods(
gid INT,
NAME VARCHAR(20),
num INT -- 库存
);
#订单表
CREATE TABLE orders( oid INT, gid INT, price INT -- 订单价格 );
# 向商品表中添加3条数据
INSERT INTO goods VALUES(1,'奶茶',20); INSERT INTO goods VALUES(2,'绿茶',100); INSERT INTO goods VALUES(3,'花茶',25)

 

2) 创建简单的存储过程

语法格式

DELIMITER $$ -- 声明语句结束符,可以自定义 一般使用$$
CREATE PROCEDURE 过程名称() -- 声明存储过程
BEGIN -- 开始编写存储过程
-- 要执行的操作
END $$ -- 存储过程结束

需求: 编写存储过程, 查询所有商品数据

DELIMITER $$
CREATE PROCEDURE goods_proc()
BEGIN
  select * from goods;
END $$

 

3) 调用存储过程

语法格式

call 存储过程名
-- 调用存储过程 查询goods表所有数据
call goods_proc;

 

方式2

1) IN 输入参数:表示调用者向存储过程传入值

CREATE PROCEDURE 存储过程名称(IN 参数名 参数类型)

2) 创建接收参数的存储过程

需求: 接收一个商品id, 根据id删除数据

DELIMITER $$
CREATE PROCEDURE goods_proc02(IN goods_id INT)
BEGIN
    DELETE FROM goods WHERE gid = goods_id ;
END $$

3) 调用存储过程 传递参数

# 删除 id为2的商品
CALL goods_proc02(2)

 

方式3

1) 变量赋值

SET @变量名=

2) OUT 输出参数:表示存储过程向调用者传出值

OUT 变量名 数据类型

3) 创建存储过程

需求: 向订单表 插入一条数据, 返回1,表示插入成功
# 创建存储过程 接收参数插入数据, 并返回受影响的行数
DELIMITER $$
CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT
out_num INT)
BEGIN
    -- 执行插入操作
    INSERT INTO orders VALUES(o_oid,o_gid,o_price);
    -- 设置 num的值为 1
    SET @out_num = 1;
    -- 返回 out_num的值
    SELECT @out_num;
END $$

 

4) 调用存储过程

# 调用存储过程插入数据,获取返回值
CALL orders_proc(1,2,30,@out_num);

 <span role="heading" aria-level="2"> MySQL:MySQL 存储过程

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/155035.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 正则表达式

    正则表达式今天看到了正则表达式,就再来重新巩固一遍啦~~~因为一些东西我都知道啦,所以就写了一个代码,将所发生的情况都试一试,还是直接上手知识来的更快呀一些功能必要说明都在注释里测试代码1import

  • NFV介绍_NFV技术

    NFV介绍_NFV技术转发自:https://zhuanlan.zhihu.com/p/26259440NFV全称是NetworkFunctionVirtualization。这又是一个与网络相关的故事。先来看看NFV的前世今生吧。在NFV之前,NF(NetworkFunction)是一直存在的,网络中,NF可以看成一个个独立的网元,实现着各自的功能。NF以固定的方式连接起来,统一提供的网络功能和服务。随便在网…

  • ARM开发环境搭建

    ARM开发环境搭建1.下载E:\ARM开发\工具软件\ARM裸机开发工具\Yagarto工具包路径下两个程序2.下载E:\ARM开发\工具软件\USB转串口驱动\CH3403.下载E:\ARM开发\工具软件\ARM裸机开发工具\JRE4.打开设备管理器->右键->更新5.6.选择E:\ARM开发\工具软件\ARM裸机开发工具\DRIVER目录下的(注意:此操作win7环境下,win7以上还要有点其他步骤)选择好就点你下一步7.出现红色弹窗点8.完成9.在E:\ARM开发\工具

  • 图像语义分割之FCN和CRF

    图像语义分割之FCN和CRF前言(呕血制作啊!)前几天刚好做了个图像语义分割的汇报,把最近看的论文和一些想法讲了一下。所以今天就把它总结成文章啦,方便大家一起讨论讨论。本文只是展示了一些比较经典和自己觉得比较不错的结构,毕竟这方面还是有挺多的结构方法了。介绍图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类从图像上来看,就是我们需要将实际的场景图分割成下面的分割图:不同颜色代表不同类别。经过我阅读“

  • GoLand 2022.01.21 激活码_在线激活2022.02.01「建议收藏」

    (GoLand 2022.01.21 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~CJM5ZJBPHS-eyJsaWNlbnNlSWQiOi…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号