基本语法的学习主要参考了mysql用户指南
存储程序需要在mysql数据库中有proc表。这个表在MySQL 5.1安装过程中创建。如果你从早期的版本升级到MySQL 5.1 ,请确定更新你的授权表以确保proc表的存在。(mysql数据库安装完毕,在mysql库里面有一个proc表)
创建mysql存储过程的权限问题
.创建存储子程序需要CREATE ROUTINE权限。
·提醒或移除存储子程序需要ALTER ROUTINE权限。这个权限自动授予子程序的创建者。
·执行子程序需要EXECUTE权限。然而,这个权限自动授予 子程序的创建者。同样,子程序默认的SQL SECURITY 特征是DEFINER,它允许用该子程序访问数据库的用户与执行子程序联系到一起。
存储程序和函数是用CREATE PROCEDURE和CREATE FUNCTION语句创建的子程序。当前只学习CREATE PROCEDURE
在MySQL 5.1中,一个存储子程序或函数与特定的数据库相联系。这里有几个意思:
·当一个子程序被调用时,一个隐含的USEdb_name被执行(当子程序终止时停止执行)。存储子程序内的USE语句时不允许的。
·你可以使用数据库名限定子程序名。这可以被用来引用一个不在当前数据库中的子程序。比如,要引用一个与test数据库关联的存储程序p或函数f,你可以说CALL test.p()或test.f()。
·数据库移除的时候,与它关联的所有存储子程序也都被移除。
CREATE PROCEDURE基本语法:
CREATE PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
routine_body:
Valid SQL procedure statement or statements
注意: 指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数)
BEGIN ... END复合语句
[begin_label:] BEGIN
[statement_list]
END [end_label]
存储子程序可以使用BEGIN ... END复合语句来包含多个语句。statement_list代表一个或多个语句的列表。statement_list之内每个语句都必须用分号(;)来结尾。
除非begin_label存在,否则end_label不能被给出,并且如果二者都存在。
存储程序中的变量
1、DECLARE局部变量
2、变量SET语句
3、SELECT ... INTO语句
1.1 DECLARE var_name[,...] type [DEFAULT value]
这个语句被用来声明局部变量。要给变量提供一个默认值,请包含一个DEFAULT子句。值可以被指定为一个表达式,不需要为一个常数。如果没有DEFAULT子句,初始值为NULL。
局部变量的作用范围在它被声明的BEGIN ... END块内。它可以被用在嵌套的块中,除了那些用相同名字 声明变量的块。
2.1 变量SET语句
SET var_name = expr [, var_name = expr] ...
3.1 SELECT ... INTO语句
SELECT col_name[,...] INTO var_name[,...] table_expr
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的 局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xnamevariable的参考而不是到xnamecolumn的:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
当这个程序被调用的时候,无论table.xname列的值是什么,变量newname将返回值‘bob’。
分享到:
相关推荐
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
本教程结合"mysql经典教程+mysql存储过程讲解"的主题,将深入探讨MySQL的基础知识以及核心特性——存储过程。 首先,我们需要理解什么是数据库。数据库是一个组织和存储数据的系统,允许用户以结构化方式访问和管理...
在提供的压缩包文件中,"MySQL存储过程.pdf"很可能是一份详细讲解MySQL存储过程的教程,涵盖了从基础概念到高级用法的全方位介绍。"下载说明.txt"可能包含关于如何正确获取和使用这份教程的指导,而"A5下载- 更全的...
存储过程的创建是 MySQL 存储过程的基础,MySQL 5.0 以后的版本开始支持存储过程。一个存储过程包括名字、参数列表,以及可以包括很多 SQL 语句的 SQL 语句集。创建存储过程的语法如下: ```sql create procedure ...
MySQL 存储过程和触发器详解 MySQL 存储过程是指一组为了完成特定功能的 SQL 语句集合。存储过程的优点包括: 1. 封装性:存储过程可以将多个 SQL 语句封装在一起,方便调用和维护。 2. 可增强 SQL 语句的功能和...
1. MySQL存储过程编程基础:熟悉存储过程的基本概念、语法结构、如何创建存储过程以及存储过程中常见的SQL语句使用和错误处理机制。 2. 创建存储过程程序:掌握事务处理的方法,了解MySQL内建函数的使用,学习如何...
创建存储过程的基本语法 Create procedure procedue_name [@parameter data_type][output] [with]{recompile|encryption} as sql_statement 实例 1: 查询表 Book 的内容的存储过程 Create proc query_book as ...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个教程将深入讲解如何在MySQL中创建、调用和管理存储过程,以及它们在实际应用中的价值。 ...
MySQL存储过程调试是数据库开发中的重要环节,它能帮助开发者检查和优化代码,确保存储过程的正确性和效率。本文将详细介绍MySQL存储过程调试工具的使用,以及如何在不同版本的MySQL中进行有效调试。 首先,MySQL...
创建MySQL存储过程的基本格式如下: ```sql CREATE PROCEDURE 过程名([过程参数[, ...]]) [特性] 过程体 ``` **2. 参数类型** MySQL存储过程支持三种类型的参数: - **IN 输入参数**:调用时必须提供值,过程中...
最后,"mysql存储过程.pdf"专注于MySQL的存储过程。存储过程是预编译的SQL语句集合,可以提高数据库操作的性能,减少网络流量,并增强数据安全。在PDF文档中,你将学习如何定义、调用和管理存储过程,以及如何使用...
以上内容概述了MySQL存储过程和函数的基本概念、创建方法、变量定义、条件处理、流程控制、游标使用、预处理语句以及常见问题。通过这些知识点的学习,可以帮助开发者更好地理解和应用MySQL存储过程和函数,从而提高...
### MySQL存储过程与函数详解 #### 一、概述 MySQL是一种广泛使用的开源关系型数据库管理系统,在数据管理和存储方面提供了强大的支持。其中,存储过程和函数是MySQL提供的两种重要的编程特性,它们可以帮助开发者...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个电子书显然专注于探讨MySQL存储过程的各个方面,为学习者提供了一个深入理解、创建和使用...
在本篇总结文档中,我们将探讨MySQL存储过程的简单应用,包括循环结构、创建临时表、删除数据、分页查询以及动态存储过程的编写。 首先,让我们了解一下什么是存储过程。存储过程是一组为了完成特定功能的SQL语句集...
本篇文章将深入探讨MySQL存储过程的基础知识、创建与调用方法,以及实际应用中的最佳实践。 一、存储过程的概念与优点 存储过程是由一个或多个SQL语句组成的代码块,存储在数据库服务器中,可以被多次调用执行。它...