MySQL存储过程及语法详解

yizhihongxing

MySQL存储过程详解

什么是MySQL存储过程

MySQL存储过程是一种在MySQL数据库服务器上运行的子程序。它是一组SQL语句的集合,经过编译后被保存到数据库中,可通过调用来执行其中的语句,具有变量定义、流程控制、条件分支、循环等基本编程结构。

MySQL存储过程可以使数据库的应用程序更加简单有效,通过把复杂的业务逻辑封装在存储过程中实现,可最大限度地提高性能,减少数据传输次数,降低整体IO开销。

存储过程语法详解

1.创建存储过程

DELIMITER $$

CREATE PROCEDURE 存储过程名称([参数列表])
BEGIN
SQL语句;
END $$

DELIMITER ;

说明:

  • DELIMITER是为了防止SQL语句中使用";"造成语句无法正确提交的问题,在创建前需设置为"$$"或其他符号;
  • CREATE PROCEDURE是创建存储过程的关键字,后面跟着存储过程名称和参数列表,参数列表可以为空;
  • BEGIN——END之间是存储过程的执行语句,其中可以包含SELECT、INSERT、UPDATE、DELETE等SQL语句;
  • END后需要加上设置的分隔符,即"$$",表示语句结束。
  • 最后,需要将分隔符重置为";",防止下一条SQL语句被误认为是存储过程的一部分。

2.调用存储过程

CALL 存储过程名称([参数列表]);

说明:

CALL是调用存储过程的关键字,后面跟着存储过程名称和参数列表,参数列表可以为空。

3.条件分支和循环

MySQL存储过程有IF-ELSE、CASE、LOOP、REPEAT、WHILE、ITERATE和LEAVE等控制结构,可实现条件分支和循环等功能。

  • IF-ELSE和CASE:
DELIMITER $$

CREATE PROCEDURE `procedure_1`()
BEGIN
DECLARE score INT DEFAULT 90;
IF(score > 90) THEN
SELECT '优秀';
ELSEIF(score > 80) THEN
SELECT '良好';
ELSEIF(score > 70) THEN
SELECT '中等';
ELSE
SELECT '不及格';
END IF;
END $$

DELIMITER ;
DELIMITER $$

CREATE PROCEDURE `procedure_2`()
BEGIN
DECLARE score INT DEFAULT 80;
CASE
WHEN (score > 90) THEN SELECT '优秀';
WHEN (score > 80) THEN SELECT '良好';
WHEN (score > 70) THEN SELECT '中等';
ELSE SELECT '不及格';
END CASE;
END $$

DELIMITER ;
  • WHILE循环:
DELIMITER $$

CREATE PROCEDURE `procedure_3`()
BEGIN
DECLARE n INT DEFAULT 1;
WHILE n <= 10 DO
SELECT n;
SET n = n+1;
END WHILE;
END $$

DELIMITER ;
  • REPEAT...UNTIL循环:
DELIMITER $$

CREATE PROCEDURE `procedure_4`()
BEGIN
DECLARE n INT DEFAULT 1;
REPEAT
SELECT n;
SET n = n+1;
UNTIL n>10
END REPEAT;
END $$

DELIMITER ;

MySQL存储过程的优缺点

优点

1.提高性能:存储过程能够在数据库内部完成复杂的数据处理,降低了网络带宽占用和数据传输时间的开销,通过调用存储过程,减少了应用程序与数据库之间的交互次数,从而提升系统性能。

2.代码封装:将常用的SQL操作进行封装,使调用方便,提高程序代码的可维护性和可重用性,降低了代码的复杂度。

3.安全性:通过授权机制,从而使得存储过程能够满足更好的安全性要求,避免了SQL注入等各种攻击。

缺点

1.难以调试:存储过程编写需要使用特殊的存储过程语言,不能直接在代码中调试,需要在数据库中调用执行,较为麻烦。

2.可读性差:存储过程的编写使用特殊语法,因此可读性比较差,难以在代码中直接观察和排除错误。

3.部署麻烦:需要单独编写存储过程并在数据库中进行创建和调用,部署麻烦。

总结

MySQL存储过程是一种运行在MySQL数据库服务器上的子程序,是一组SQL语句的集合,可以实现流程控制、条件分支、循环等基本编程结构。尽管存储过程存在负面影响,但好处依然明显,像APM、ETL等核心领域均是存储过程的业务场景,因此,了解MySQL存储过程能力将对我们理解业务更为深刻的。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL存储过程及语法详解 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • MySQL数据库使用规范总结

    MySQL数据库使用规范总结 MySQL作为一个开源的关系型数据库管理系统,使用广泛。但是,为了保证MySQL的安全性和性能,需要遵循一定的使用规范。本文将从以下几个方面详细讲解MySQL数据库使用规范。 数据库设计规范 表的设计:表的设计需要符合第一范式、第二范式和第三范式,也就是每个字段只存储一个值,表中的每个字段都应该和主键关联,表中的每个非主键字段都…

    database 2023年5月22日
    00
  • 使用mongovue把sqlserver数据导入mongodb的步骤

    使用mongovue工具将SQL Server数据导入MongoDB需要以下步骤: 下载和安装mongovue工具。 在mongovue中创建一个新的MongoDB连接。 选择导入数据的目标数据库。 打开SQL Server Management Studio(SSMS),并运行一个查询来选择您要导出的数据。 将 SSMS 中的查询结果导出为CSV文件。 在…

    database 2023年5月21日
    00
  • oracle数据库优化辅助SQL语句

    Oracle数据库优化辅助SQL语句 为了解决Oracle数据库性能问题,我们需要使用一些SQL语句进行优化。以下是一些优化辅助SQL语句。 1. Explain Plan Explain Plan语句可以帮助我们查看Oracle数据库的执行计划,以便更好地优化查询语句。 EXPLAIN PLAN FOR [查询语句]; 例如,我们可以使用以下代码来查看查询…

    database 2023年5月19日
    00
  • 如何使用Python在数据库中添加一个新的列?

    以下是如何使用Python在数据库中添加一个新的列的完整使用攻略。 使用Python在数据库中添加一个新的列的前提条件 使用Python在数据库中添加一个新的列之前,需要确已经安装并启动了支持添加新列的数据库,例如MySQL或PostgreSQL且需要安装Python的相应数据库驱动程序,例如mysql-connector-python或psycopg2。 …

    python 2023年5月12日
    00
  • MYSQL函数的使用梳理

    MYSQL函数的使用梳理 MYSQL是一种常用的关系型数据库管理系统,在使用中,函数是不可或缺的组成部分。MYSQL函数主要分为以下几类:数值函数、日期时间函数、字符处理函数、聚合函数和控制流函数。下面对这几种函数一一进行介绍。 数值函数 ABS ABS函数用于返回一个数的绝对值。例如: SELECT ABS(-10); // 输出10 ROUND ROUN…

    database 2023年5月22日
    00
  • MongoDB正则表达式使用方法全攻略

    MongoDB正则表达式概述 正则表达式是用来匹配字符串的一种方式。在 MongoDB 中,正则表达式可以用来做字符串的匹配查询。 在 MongoDB 中,正则表达式的语法跟 Javascript 中的正则表达式语法基本相同,它们都是采用斜杠(/)包围正则表达式模式,并用可选的标记来修饰模式。 下面是 MongoDB 正则表达式的语法: /pattern/m…

    MongoDB 2023年3月14日
    00
  • DBMS中分类和聚类的区别

    DBMS中分类(classification)和聚类(clustering)是两个非常常见的数据挖掘(data mining)技术,主要应用于无监督学习(unsupervised learning)场景中。虽然这两者在表面上看起来非常相似,但它们在实现方法和应用场景上存在一些区别。 分类(classification) 分类是一种基于预先定义好的类别(cat…

    database 2023年3月27日
    00
  • Python连接数据库并批量插入包含日期记录的操作

    下面是Python连接数据库并批量插入包含日期记录的操作的完整攻略: 1. 连接数据库 Python连接数据库需要使用到相应的的库,比如MySQL数据库需要使用pymysql库。下面是一个连接MySQL数据库的样例代码: import pymysql #连接数据库 db = pymysql.connect(host = ‘localhost’, port =…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部