我是靠谱客的博主 火星上往事,最近开发中收集的这篇文章主要介绍带你了解数据库的存储过程一. 存储过程概述二. 存储过程语法三. 存储过程实例四. 数据库专栏  ,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

一. 存储过程概述

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))
begin
    select 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)
begin
    declare tex int default 0;
    select 1 into tex from information_schema.tables where table_name='emp_copy';
    if tex<>1 then
        create 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.5482icon-default.png?t=M7J4https://blog.csdn.net/weixin_53919192/category_11813282.html?spm=1001.2014.3001.5482

最后

以上就是火星上往事为你收集整理的带你了解数据库的存储过程一. 存储过程概述二. 存储过程语法三. 存储过程实例四. 数据库专栏  的全部内容,希望文章能够帮你解决带你了解数据库的存储过程一. 存储过程概述二. 存储过程语法三. 存储过程实例四. 数据库专栏  所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部