MySQL存储过程中的语法学习

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

以下的文章主要介绍的是MySQL存储过程中的语法学习,主要内容包括名字,参数列表,与很多SQL语句的SQL语句集。以下就是具体方案的描述,希望会给你带来一些帮助在此学习方面。

一个存储过程包括名字,参数列表,以及可以包括很多SQL语句的SQL语句集。

创建存储过程:

 

语法:

 

 
 
  1. CREATE PROCEDURE p()  
  2. BEGIN  

 

此存储过程的正文

 

 
 
  1. END  
  2. CREATE PROCEDURE productpricing()  
  3. BEGIN  
  4. SELECT Avg(pro_price) AS priceaverage  
  5. FROM products;  
  6. END;  

 

begin…end之间是存储过程的主体定义

MySQL的分界符是分号(;)
 

 

调用存储过程的方法是:

 

CALL加上过程名以及一个括号

例如调用上面定义的存储过程

 

 
 
  1. CALL productpricing();  

哪怕是不用传递参数,存储过程名字后面的括号“()”也是必须的
 

删除存储过程的方法是

 
 
  1. DROP PROCUDURE productpricing; 

创建带参数的存储过程:

 

 

 
 
  1. CREATE PROCUDURE productpricing(  
  2. OUT p1 DECIMAL(8,2),  
  3. OUT ph DECIMAL(8,2),  
  4. OUT pa DECIMAL(8,2)  
  5. )  
  6. BEGIN  
  7. SELECT Min(prod_price) INTO pl FROM products;  
  8. SELECT Max(prod_price) INTO ph FROM products;   
  9. SELECT Avg(prod_price) INTO pa FROM products;  
  10. END;  

 

DECIMAL用于指定参数的数据类型

OUT用于表明此值是用于从存储过程里输出的

MySQL支持 OUT, IN, INOUT
 

调用带参数的存储过程:

 

 

 
 
  1. CALL productpricing(@pricelow,  
  2. @pricehigh,  
  3. @priceaverage);   

 

所有的参数必须以@开头

要想获取@priceaverage的值,用以下语句

 

 
 
  1. SELECT @priceaverage; 

获取三个的值,用以下语句

 
 
  1. SELECT @pricehigh, @pricelow, @priceaverage; 

另一个带IN和OUT参数的存储过程:

 

 

 
 
  1. CREATE PROCEDURE ordertotal(  
  2. IN onumber INT,  
  3. OUT ototal DECIMAL(8,2)  
  4. )  
  5. BEGIN  
  6. SELECT Sum(item_price*quantity)  
  7. FROM orderitems  
  8. WHERE order_num = onumber 
  9. INTO ototal;  
  10. END;  
  11. CALL ordertotal(20005, @total);  
  12. SELECT @total;  

添加一个完整的例子:(这是一个自定义分页的存储过程)

 

 
 
  1. DELIMITER $$  
  2. DROP PROCEDURE IF EXISTS `dbcall`.`get_page`$$  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `get_page`(  
  4. /**//*Table name*/  
  5. tableName varchar(100),  
  6. /**//*Fileds to display*/  
  7. fieldsNames varchar(100),  
  8. /**//*Page index*/  
  9. pageIndex int,  
  10. /**//*Page Size*/  
  11. pageSize int,   
  12. /**//*Field to sort*/  
  13. sortName varchar(500),  
  14. /**//*Condition*/  
  15. strWhere varchar(500)  
  16. )  
  17. BEGIN   
  18. DECLARE fieldlist varchar(200);   
  19. if fieldsNames=''||fieldsNames=null THEN  
  20. set fieldlist='*';  
  21. else  
  22. set fieldlist=fieldsNames;   
  23. end if;  
  24. if strWhere=''||strWhere=null then  
  25. if sortName=''||sortName=null then   
  26. set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  
  27. else  
  28. set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   
  29. end if;  
  30. else  
  31. if sortName=''||sortName=null then  
  32. set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);  
  33. else  
  34. set @strSQL=concat('SELECT ',fieldlist,' FROM ',tableName,' WHERE ',strWhere,' 
    ORDER BY ',sortName,' LIMIT ',(pageIndex-1)*pageSize,',',pageSize);   
  35. end if;  
  36. end if;   
  37. PREPARE stmt1 FROM @strSQL;   
  38. EXECUTE stmt1;  
  39. DEALLOCATE PREPARE stmt1;  
  40. END$$  
  41. DELIMITER ;  

 

以上的相关内容就是对MySQL存储过程语法学习的介绍,望你能有所收获。










本文转自 yuanzhitang 51CTO博客,原文链接:http://blog.51cto.com/yuanzhitang/507525,如需转载请自行联系原作者
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
分布式计算 关系型数据库 MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
大数据-88 Spark 集群 案例学习 Spark Scala 案例 SuperWordCount 计算结果数据写入MySQL
56 3
|
2天前
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
2天前
|
SQL 存储 关系型数据库
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
本文详细介绍了MySQL中的SQL语法,包括数据定义(DDL)、数据操作(DML)、数据查询(DQL)和数据控制(DCL)四个主要部分。内容涵盖了创建、修改和删除数据库、表以及表字段的操作,以及通过图形化工具DataGrip进行数据库管理和查询。此外,还讲解了数据的增、删、改、查操作,以及查询语句的条件、聚合函数、分组、排序和分页等知识点。
【MySQL基础篇】全面学习总结SQL语法、DataGrip安装教程
|
1月前
|
存储 SQL NoSQL
|
2月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
95 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
2月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
251 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
2月前
|
Java 关系型数据库 MySQL
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
这篇文章是关于如何使用Spring Boot框架通过JdbcTemplate操作MySQL数据库的教程。
93 0
springboot学习四:springboot链接mysql数据库,使用JdbcTemplate 操作mysql
|
2月前
|
存储 SQL 关系型数据库
MySql数据库---存储过程
MySql数据库---存储过程
46 5
|
2月前
|
存储 关系型数据库 MySQL
MySQL 存储过程返回更新前记录
MySQL 存储过程返回更新前记录
67 3
|
2月前
|
存储 SQL 关系型数据库
MySQL 存储过程错误信息不打印在控制台
MySQL 存储过程错误信息不打印在控制台
86 1