首页 > 数据库 >mysql - 存储过程

mysql - 存储过程

时间:2023-03-27 13:34:11浏览次数:39  
标签:语句 存储 数据库 mysql 参数 SQL 过程

定义

存储过程(stored procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。

分类

存储过程分为系统存储过程和自定义存储过程。
1)系统存储过程在master数据库中,但是在其他的数据库中可以直接调用,并且在调用时不必在存储过程前加上数据库名,因为在创建一个新数据库时,系统存储过程在新的数据库中会自动创建
2)自定义存储过程,由用户创建并能完成某一特定功能的存储过程,存储过程既可以有参数又有返回值,但是它与函数不同,存储过程的返回值只是指明执行是否成功,并不能像函数那样被直接调用,只能利用execute来执行存储过程。

优点

1)提高应用程序的通用性和可移植性:存储过程创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。并且数据库专业人员可以随时对存储过程进行修改,且对程序源代码没有影响,这样就极大的提高了程序的可移植性。
2)可以更有效的管理用户操作数据库的权限:在SqlServer数据库中,系统管理员可以通过对执行某一存储过程的权限进行限制,从而实现对相应的数据访问进行控制,避免非授权用户对数据库的访问,保证数据的安全。
3)可以提高SQL的速度,存储过程是编译过的,如果某一个操作包含大量的SQL代码或分别被执行多次,那么使用存储过程比直接使用单条SQL语句执行速度快的多。
4)减轻服务器的负担:当用户的操作是针对数据库对象的操作时,如果使用单条调用的方式,那么网络上还必须传输大量的SQL语句,如果使用存储过程,则直接发送过程的调用命令即可,降低了网络的负担。

参数类型

存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下:

1、没有参数(无参数无返回)
2、仅仅带 IN 类型(有参数无返回)
3、仅仅带 OUT 类型(无参数有返回)
4、既带 IN 又带 OUT(有参数有返回)
5、带 INOUT(有参数有返回)
注意: IN、OUT、INOUT 都可以在一个存储过程中带多个。

创建存储过程

语法如下:

 因为MySQL默认的语句结束符号为分号是“;”,为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER改变存储过程的结束符

 

调用存储过程

查看存储过程

SHOW PROCEDURE STATUS   -- 列出当前所有的存储过程

 

删除存储过程

DROP PROCEDURE IF EXISTS hah1 -- 删除名字为hah1的存储过程

 

例子:

写一个存储过程,查找Employee 表中第 n 高的工资。如果没有第 n 个最高工资,查询结果应为 null

DELIMITER $$
CREATE PROCEDURE getNthHighestSalary1(IN N INT, OUT NthHighestSal FLOAT)
BEGIN
  SET N = N - 1;
  SELECT DISTINCT salary INTO NthHighestSal FROM tbl_salary ORDER BY salary DESC LIMIT N, 1;
    
END $$
DELIMITER ;

CALL getNthHighestSalary1(3, @NthHighestSal); # 查询第3高的薪资 SELECT @NthHighestSal; CALL getNthHighestSalary1(4, @number); # 查询第4高的薪资 SELECT @number;

 

标签:语句,存储,数据库,mysql,参数,SQL,过程
From: https://www.cnblogs.com/xiaochongc/p/17261088.html

相关文章

  • Mysql主从同步
    什么是Mysql主从同步从库同步主库上的数据,(让其他数据库服务器自动同步当前正在被访问的数据服务器上的数据)   MYSQL主从复制的模式   1.异步模式(默认......
  • Office2013:支持云存储和社交功能 不支持Windows XP和Vista
    微软于北京时间今天凌晨在旧金山Metreon娱乐购物中心举行了发布会,发布了新版Office办公软件Office2013(如左图,Office也有了新的Logo),它将支持云存储和社交功能。而最新消息......
  • java代码备份mysql数据库
    生成环境的数据库我们需要不断的进行备份,不然服务器出现故障,会是灾难性的直接添加我的代码packagecom.hrp.task;importcom.alibaba.fastjson.JSON;importcom.bas......
  • mysql查看死锁
    查看死锁Mysql查询是否存在锁表有多种方式,这里只介绍一种最常用的。1、查看正在进行中的事务SELECT*FROMinformation_schema.INNODB_TRX2、查看正在锁的事务......
  • Mysql 修改表编码
    Mysql修改表编码,字段编码还是以前的Mysql修改表编码,字段编码未变ALTERTABLE`table6`CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_bin;--ALTERTABLE`rent......
  • MYSQL执行顺序
    MYSQL的执行顺序如下所示:fromonjoinwheregroupbyhavingselectdistinctunionorderby可以看到,select是在where后执行的,也就是说,select下的窗口函数也是在where之后执行的......
  • 自动生成sql 这是MySQL例子
    @TestpublicvoidtestGeneSql(){try{Stringss=getFileContentTwo("D:\test\13json.txt");JSONObjectjo=JSONObject.parseObject(ss);JSONAr......
  • 如何保障ETL过程的数据正确性。这个过程会产生哪些问题?
    保障ETL过程的数据正确性可以从以下几个方面考虑:数据源的质量:ETL过程的数据质量取决于数据源的质量,因此需要对数据源进行充分的验证和清洗,确保数据的准确性、完整性和一......
  • MySQL联合索引创建规则
    1、索引应该按照最常用于查询的列的顺序创建。这样可以最大程度地提高查询性能。2、如果查询中包含的列与索引中的列顺序不一致,则无法使用索引。因此,如果您有多个查询,每个......
  • Lucene 源代码剖析-9索引是如何存储的
    Lucene 源码剖析5           索引是如何存储的  5.1   数据存储类Directory      Directory及相关类负责文档索引的存储。           5......