目录

一. 存储过程概述

1.1.什么是存储过程

1.2.存储过程的优缺点

二. 存储过程语法

2.1.创建存储过程

2.2.调用存储过程

2.3.删除存储过程

2.4.查看存储过程

三. 存储过程实例

四. 数据库专栏


一. 存储过程概述

1.1.什么是存储过程

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。MySQL 5.0 版本开始支持存储过程。

它是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

1.2.存储过程的优缺点

优点:

  • 存储过程在服务器端运行,执行速度快。
  • 存储过程执行一次后,经过第一次编译后就不需要再次编译,提高了系统性能。
  • 确保数据库的安全。使用存储过程可以完成所有数据库操作,并可通过编程方式控制上述操作对数据库信息访问的权限

缺点:

  • 存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
  • 存储过程的性能调校与撰写,受限于各种数据库系统。

二. 存储过程语法

2.1.创建存储过程

创建存储过程语法:

create procedure 存储过程名(参数列表)
begin-- 过程体
end;

实例:根据部门编号,返回此部门所有员工的总工资。

drop procedure if exists getsalbydeptno;
create procedure getsalbydeptno(in dno int,out salsum decimal(7,2))
beginselect sum(sal) into salsum from emp where deptno=dno;
end;
  • 存储过程参数有三种模式:in,out和inout。
  1. in:传入参数(默认)
  2. out:传出参数
  3. inout:此参数是in和out参数的组合。这意味着存储过程可以修改此参数并将新值传递回调用程序。
  • 注意:参数名不能与字段名重名。
  • 在select语句中,使用into关键词给传出参数赋值。

2.2.调用存储过程

调用存储过程语法:

call getsalbydeptno(10,@salsum);
select @salsum;
  1. 使用call关键词调用存储过程。
  2. 传出参数使用 @salsum 的形式声明。

2.3.删除存储过程

删除存储过程语法:

drop procedure [if exists] 存储过程名;

删除getsalbydeptno存储过程:

drop procedure if exists getsalbydeptno;

2.4.查看存储过程

查看数据库中的所有存储过程:

show procedure status;

三. 存储过程实例

需求:公司员工离职后,需要从emp表中删除此员工的信息。但是为了能够保存历史记录,所以删除的员工信息需要备份到emp_copy表中。下面使用存储过程来完成这个功能:

/* 创建存储过程 */
drop procedure if exists backup;
create procedure backup(in eno int)
begindeclare tex int default 0;select 1 into tex from information_schema.tables where table_name='emp_copy';if tex<>1 thencreate table emp_copy select * from emp where 1=0;end if;insert into emp_copy select * from emp where empno=eno;delete from emp where empno=eno;
end;/* 调用存储过程 */
/* call backup(7369); */
  • declare tex int default 0: 声明一个变量tex,并赋默认值为0;
  • select 1 into tex from information_schema.tables where table_name='emp_copy':从系统表information_schema.tables中查询是否存在 emp_copy 表,如果存在,给变量tex 赋值为 1;
  • if tex<>1 then  ...   end if:判断tex变量的值是否为1;

四. 数据库专栏

https://blog.csdn.net/weixin_53919192/category_11813282.html?spm=1001.2014.3001.5482https://blog.csdn.net/weixin_53919192/category_11813282.html?spm=1001.2014.3001.5482

带你了解数据库的存储过程相关推荐

  1. oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...

    C#连接Oracle数据库通过存储过程操作数据库 收藏 此文于2011-06-07被推荐到CSDN首页 此文于2011-06-08被推荐到CSDN首页 如何被推荐? 之前笔者一直用C#连接SQL Se ...

  2. mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL

    之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...

  3. 金仓数据库KingbaseES数据库中存储过程和函数的区别

    关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等)  用于特定的数据(如选择) 2 程序头 ...

  4. 数据60秒 | 金仓K宝带你秒懂数据库(下)

    金仓K宝带你秒懂数据库下集来啦~ 数据60秒是我们为读者朋友们准备的数据库百科科普系列短视频.您可以通过视频轻松了解数据库序列.数据字典.数据完整性等数据库领域内专业知识. 快来乘坐数据库专列,让金仓 ...

  5. vc cdatabase oracle,VC程序访问Oracle数据库的存储过程时的问题解决方案

    在用VC开发的应用程序中,访问Oracle数据库的存储过程中出现了问题如下:在脚本里面调用存储过程的时候,如果用exec mysp 就报告"无效字符":如果用 {call mysp ...

  6. centos6卸载mysql服务器_CentOS6.5下卸载自带的MySQL数据库安装MySQL5.6

    1)查看CentOS自带的mysql 输入 rpm -qa | grep mysql mysql-libs-5.1.71-1.el6.x86_64 2)将其自带的mysql版本全部卸载(非常重要,如不 ...

  7. mysql数据库存储数据的过程_[数据库]MySql存储过程总结

    [数据库]MySql存储过程总结 0 2014-06-12 01:00:50 之前总是在MSSQL上写存储过程,没有在MYSQL上写过,也基本没有用过,今天需要用到MYSQL,研究了下,把项目的需要的 ...

  8. [转] sql server 跨数据库调用存储过程

    A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( @UserName nvarchar(20) =null ,@LoginPwd nvarchar(60) ...

  9. wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...

    将php连接到MySQL数据库的方法有很多,在这里我使用的是mysqli_connect方法, 此博客所解答的问题汇总: 1.wampserver服务器离线但图标为正常绿: 2.wampserver ...

最新文章

  1. DOS配合FastCopy实现远程增量备份
  2. 【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )
  3. Linux基础练习题(三)
  4. Linux Shell脚本专栏_批量创建100用户并设置密码脚本_03
  5. 从有限状态机(FSM)到行为树(Behavior Tree)(1)
  6. 从蒙到入门——JavaEE完整体系架构
  7. Ubuntu桌面生存指南:Linux 的哲学
  8. my games / BF3 / GTA5 / NFS18 / sanguowushuang6 / RA2 / KOF97 / FIFA
  9. 浙江省高校教师职称计算机考试成绩查询系统,浙江省高校招生考试信息管理系统...
  10. PS2019 常用快捷键大全
  11. Oracle新创建的用户没有被授权user lacks CREATE SESSION privilege logon denied
  12. 德州农工大学计算机专业如何,德州农工大学美国排名
  13. matplotlib 3D绘图警告;MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecate
  14. 关于测试中常用到的一些方法、策略总结
  15. Java编写的画图板,功能非常齐全,完整代码 附详细设计报告
  16. 西安电子科技大学计算机专硕调剂,西安电子科技大学人工智能学院2020研究生调剂通知...
  17. mmdetection 环境配置与简单测试(mmrotate同理)
  18. 华为鸿蒙系统支持联发科,华为鸿蒙OS将采用高通和联发科处理器平台
  19. 二本计算机专业 考研究生,二本可以考上985的研究生吗?
  20. moto xt800 刷机到2.2.2

热门文章

  1. 荟萃金融科技成果,展现数字金融力量丨通付盾受邀出席中国国际金融展
  2. 3712. 【NOI2014模拟6.30】石中剑的考验(sword)
  3. LEAPMOTION开发UI专题(2)
  4. tensorflow cifar10 分类预测实战
  5. Linux rwx权限详解
  6. java 清空scanner_Java Scanner reset()用法及代码示例
  7. 人工智能ChatGPTJAVA软件源码之实践
  8. Window user32子动态库控件封装和消息分发浅析
  9. Ubuntu中使用motion制作监控
  10. Ardunio 电子秤 重力传感器HX711笔记