存储过程(数据库必学)

本文深入探讨了存储过程的概念,强调了其在提升性能、减少网络流量、增强安全性和可维护性方面的优点。同时,也指出存储过程的缺点,如不易移植和参数更新时可能需要修改应用程序代码。文章通过示例展示了存储过程的创建、调用、删除,并提供了初始化数据的存储过程实例。
摘要由CSDN通过智能技术生成

概念

  1. 存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用
  2. 存储过程中可以包含逻辑控制语句和数据操纵语句, 它可以接受参数 , 输出参数 ,返回单个或多个结果集以及返回值

优缺点

优点

  1. 由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中 , 所以存储过程运行要比单个的SQL语句块要快;
  2. 由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量,减少网络负担;
  3. 可维护性高,更新存储过程通常比更改sql以及重新部署程序集需要较少的时间和精力;
  4. 增强安全性:
    1. 通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
    2. 提高代码安全,防止SQL注入(但未彻底解决,例如将数据操作语言DML附加到输入参数);
    3. SQLParameter类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证);

缺点

  1. 如果更改范围大到需要对输入存储过程的参数进行更改,或者要更改由其返回的数据,则仍需要更新程序集中的代码以添加参数;
  2. 可移植性差,由于存储过程将应用程序绑定到Server,因此使用存储过程封装业务逻辑将限制应用程序的可移植性。

语法

CREATE PROCEDURE proc_name ([IN | OUT | INOUT param_name type [,...]])

[characteristic ...] 

BEGIN

​	routine_body

END;

参数说明

  1. proc_name:表示存储过程的名称
  2. [IN | OUT | INOUT param_name type:表示存储过程的参数,它们分别是输入输出类型,参数名称和参数类型。其中,IN表示输入参数;OUT表示输出参数。param_name参数是存储过程参数名称;type参数是指定存储过程的参数类型,该类型可以为MySQL数据库的任意数据类型
  3. routine_body:表示SQL代码的内容。包含局部变量、逻辑代码、sql语句…

局部变量

在这里插入图片描述

逻辑控制语句

在这里插入图片描述

调用

所有变量都必须以@开始,若没有则不填

CALL proc_name([parameter[,]]);

例如:call GetScores(@minScore, @avgScore, @maxScore);

删除

DROP PROCEDURE IF EXISTS proc_name;

实例

根据 prodID 获取货品的价格,并根据参数判断是否折扣
在这里插入图片描述

假数据添加(存储过程)

执行CALL proc_initData() 这一步可能会有点慢,耐心等待!

DROP PROCEDURE IF EXISTS proc_initData;

CREATE PROCEDURE proc_initData()

BEGINDECLARE i INT DEFAULT 1;WHILE i<=20000 DOINSERT INTO `usr_shxf_wjdc`.`t_dj_eclub` (`wid`, `author`, `createDate`, `title`, `content`, `type`) VALUES (uuid(), '赛文', '2019-08-03', '标题一', 'fdsfds', '3');SET i = i+1;END WHILE;

END;


CALL proc_initData();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值