当前位置: 首页 > news >正文

数据库-存储过程

文章目录

      • 存储过程
          • 存储过程创建方式
        • 1.创建无参存储过程
        • 2.有参存储过程
        • 3.案例
      • 创建输出参数存储过程
      • 存储过程的优缺点

存储过程

存储过程是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的sql语句集,经编译创建并保存在数据库中,用户可以通过存储过程的名字并给定参数(需要时)来调用执行。

简单理解,存储过程其实就是一堆sql语句的合并。中间加入一些逻辑控制。

存储过程创建方式

存储过程创建方式:

  • 创建无参存储过程
  • 创建有参存储过程

1.创建无参存储过程

1.语法格式:

delimiter $$ -- 表示声明一个存储过程的定义方法
create procedure 存储过程名称() -- 声明当前存储过程的名称
begin -- 表示存储过程内部的sql语句声明的开始

	# 表示sql执行的操作

end $$ -- 表示声明这个存储过程的定义结束

2.调用存储过程:调用的过程类似java中方法的调用。

call 存储过程名称();
# 简写
call 存储过程名称;

2.有参存储过程

在调用存储过程的时候,需要传递默写参数,给存储过程

语法定义:

delimiter $$
create procedure 存储过程名称(IN 参数名称 参数数据类型)
begin 
	# sql操作
end $$

delimiter $$
create procedure 存储过程名称(IN age int)
begin 
	# sql操作
end $$

IN关键字:用来指定当前存储过程可以接收参数列表

参数名称 参数数据类型:在接收参数时,存储过程需要指定参数名称和当前参数的类型。

有参存储过程调用:

call 存储过程名称(实参);

call 存储过程名称(20);

3.案例

1.数据的准备:

# 商品表
CREATE TABLE goods(
 gid Int,
 name VARCHAR(20),
 num INT -- 库存
);

# 订单表
CREATE TABLE orders(
 oid INT,
 gid INT,
 price INT -- 订单价格
);

# 想商品表添加数据
INSERT INTO goods VALUES(1,'奶茶',20);
INSERT INTO goods VALUES(2,'绿茶',100);
INSERT INTO goods VALUES(3,'花茶',25);

2.案例:编写存储过程,查询所有商品数据。

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

create procedure goods_proc()
begin 
	# sql语句的操作
	SELECT * FROM goods;

end $$

3.案例:创建一个存储过程,能够接收一个商品id,并根据id删除商品数据

# 使用当前存储过程
call goods_proc();
call goods_proc;

delimiter $$
 create procedure goods_delById_proc(IN goods_id int)
begin
	delete from goods where gid = goods_id;
end $$
	
	
call goods_delById_proc(2);

创建输出参数存储过程

IN:表示接收传递给存储过程的数据

OUT:表示被修饰的参数返回数据给调用者

delimiter $$
create procedure 存储过程名称(
    			IN 参数名称1 参数数据类型1,
				IN 参数名称2 参数数据类型2,
				IN 参数名称3 参数数据类型3
				...
				OUT 参数名称1 参数数据类型1
				OUT 参数名称2 参数数据类型2
				...)
begin 
	# sql操作
	# 设置参数值(操作:传递参数,输出参数)
	set @参数名称 =;
	# 返回变量的值
	select @参数名称;
end $$

语法:

1.如果存储过程有多个参数,使用逗号分隔

2.set用来设置变量的值,需select用来返回变量的值

3.存储过程内部访问变量,需要使用@作为变量的修饰进行访问

案例:

# 复杂的存储过程
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);
	-- 给输出变量out_num赋值(10)
	set @out_num = 10;
	-- 将参数返回
	select @out_num;
end $$;

call orders_proc(1, 1, 100, @out_num);

存储过程的优缺点

相关文章:

  • 【0基础学习mysql】之DML-表中数据的操作
  • HybirdCLR 探索—— .NET相关概念(基础)
  • Linux篇【1】:入门与基本指令详解(中)
  • 基于强化学习PPO(Proximal Policy Optimization)算法的无人机姿态控制系统
  • HDFS源码分析——NameNode启动流程
  • 【Day20】LeetCode算法题【1784. 检查二进制字符串字段】【14. 最长公共前缀】
  • 状态反馈镇定之非线性系统反馈线性化
  • 【408计算机组成原理】—加减运算和溢出判断(八)
  • vue3 setup的四点注意
  • Python 输入与输出
  • 基于JAVA校园租赁系统的设计与实现计算机毕业设计源码+系统+数据库+lw文档+部署
  • 【Linux初阶】从0到1带你用云服务器搭建Linux环境
  • Kubernetes技术与架构-10
  • 基于微信小程序云开(统计学生信息并导出excel)3.0版
  • 【JAVAEE框架】浅谈 AOP 及代码实现
  • 分享一款快速APP功能测试工具
  • JAVA之继承和多态
  • JSONP原理
  • k8s如何管理Pod
  • Making An Indicator With Pure CSS
  • python docx文档转html页面
  • Sequelize 中文文档 v4 - Getting started - 入门
  • win10下安装mysql5.7
  • XForms - 更强大的Form
  • - 概述 - 《设计模式(极简c++版)》
  • 前端相关框架总和
  • 入门级的git使用指北
  • 三栏布局总结
  • 王永庆:技术创新改变教育未来
  • puppet连载22:define用法
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ​queue --- 一个同步的队列类​
  • ​VRRP 虚拟路由冗余协议(华为)
  • #大学#套接字
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (1)(1.13) SiK无线电高级配置(五)
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (离散数学)逻辑连接词
  • (五)关系数据库标准语言SQL
  • (一) springboot详细介绍
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)c++ std::pair 与 std::make
  • (转)创业的注意事项
  • ***通过什么方式***网吧
  • .apk文件,IIS不支持下载解决
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net 应用中使用dot trace进行性能诊断
  • .Net语言中的StringBuilder:入门到精通
  • .NET中 MVC 工厂模式浅析
  • []Telit UC864E 拨号上网