带你了解数据库的存储过程
目录
一. 存储过程概述
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。
- in:传入参数(默认)
- out:传出参数
- inout:此参数是in和out参数的组合。这意味着存储过程可以修改此参数并将新值传递回调用程序。
- 注意:参数名不能与字段名重名。
- 在select语句中,使用into关键词给传出参数赋值。
2.2.调用存储过程
调用存储过程语法:
call getsalbydeptno(10,@salsum);
select @salsum;
- 使用call关键词调用存储过程。
- 传出参数使用 @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
带你了解数据库的存储过程相关推荐
- oracle表的历史数据转储过程,C#连接Oracle数据库通过存储过程操作数据库 - cuizm的专栏 - CSDN博客...
C#连接Oracle数据库通过存储过程操作数据库 收藏 此文于2011-06-07被推荐到CSDN首页 此文于2011-06-08被推荐到CSDN首页 如何被推荐? 之前笔者一直用C#连接SQL Se ...
- mysql数据库的存储过程不用学吗,MySql数据库之存储过程学习_MySQL
之前在工作中总是听别人提到存储过程,觉得是个很高深的东西,利用工作之余,看了下相关的知识,现将学习知识总结如下,希望可以为刚学习的人提供些许帮助. 开发环境:Navicat For Mysql. My ...
- 金仓数据库KingbaseES数据库中存储过程和函数的区别
关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等) 用于特定的数据(如选择) 2 程序头 ...
- 数据60秒 | 金仓K宝带你秒懂数据库(下)
金仓K宝带你秒懂数据库下集来啦~ 数据60秒是我们为读者朋友们准备的数据库百科科普系列短视频.您可以通过视频轻松了解数据库序列.数据字典.数据完整性等数据库领域内专业知识. 快来乘坐数据库专列,让金仓 ...
- vc cdatabase oracle,VC程序访问Oracle数据库的存储过程时的问题解决方案
在用VC开发的应用程序中,访问Oracle数据库的存储过程中出现了问题如下:在脚本里面调用存储过程的时候,如果用exec mysp 就报告"无效字符":如果用 {call mysp ...
- 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版本全部卸载(非常重要,如不 ...
- mysql数据库存储数据的过程_[数据库]MySql存储过程总结
[数据库]MySql存储过程总结 0 2014-06-12 01:00:50 之前总是在MSSQL上写存储过程,没有在MYSQL上写过,也基本没有用过,今天需要用到MYSQL,研究了下,把项目的需要的 ...
- [转] sql server 跨数据库调用存储过程
A库存储过程: create PROCEDURE [dbo].[spAAAForTest] ( @UserName nvarchar(20) =null ,@LoginPwd nvarchar(60) ...
- wamserver怎么把mysql找回来_将php连接wampserver自带的MySQL数据库 所遇到各种问题解决办法...
将php连接到MySQL数据库的方法有很多,在这里我使用的是mysqli_connect方法, 此博客所解答的问题汇总: 1.wampserver服务器离线但图标为正常绿: 2.wampserver ...
最新文章
- DOS配合FastCopy实现远程增量备份
- 【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )
- Linux基础练习题(三)
- Linux Shell脚本专栏_批量创建100用户并设置密码脚本_03
- 从有限状态机(FSM)到行为树(Behavior Tree)(1)
- 从蒙到入门——JavaEE完整体系架构
- Ubuntu桌面生存指南:Linux 的哲学
- my games / BF3 / GTA5 / NFS18 / sanguowushuang6 / RA2 / KOF97 / FIFA
- 浙江省高校教师职称计算机考试成绩查询系统,浙江省高校招生考试信息管理系统...
- PS2019 常用快捷键大全
- Oracle新创建的用户没有被授权user lacks CREATE SESSION privilege logon denied
- 德州农工大学计算机专业如何,德州农工大学美国排名
- matplotlib 3D绘图警告;MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecate
- 关于测试中常用到的一些方法、策略总结
- Java编写的画图板,功能非常齐全,完整代码 附详细设计报告
- 西安电子科技大学计算机专硕调剂,西安电子科技大学人工智能学院2020研究生调剂通知...
- mmdetection 环境配置与简单测试(mmrotate同理)
- 华为鸿蒙系统支持联发科,华为鸿蒙OS将采用高通和联发科处理器平台
- 二本计算机专业 考研究生,二本可以考上985的研究生吗?
- moto xt800 刷机到2.2.2
热门文章
- 荟萃金融科技成果,展现数字金融力量丨通付盾受邀出席中国国际金融展
- 3712. 【NOI2014模拟6.30】石中剑的考验(sword)
- LEAPMOTION开发UI专题(2)
- tensorflow cifar10 分类预测实战
- Linux rwx权限详解
- java 清空scanner_Java Scanner reset()用法及代码示例
- 人工智能ChatGPTJAVA软件源码之实践
- Window user32子动态库控件封装和消息分发浅析
- Ubuntu中使用motion制作监控
- Ardunio 电子秤 重力传感器HX711笔记