您的当前位置:首页正文

MYSql存储过程的作用及语法

2023-11-09 来源:画鸵萌宠网

1.基本语法:create procedure sp_name() begin ......... end 2.参数传递

二.调用存储过程

1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

1.基本语法: drop procedure sp_name// 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.区块,条件,循环

1.区块定义,常用 begin ...... end; 也可以给区块起别名,如: lable:begin ........... end lable; 可以用leave lable;跳出区块,执行区块以后的代码 2.条件语句技术分享if 条件 then 技术分享statement 技术分享else 技术分享statement 技术分享end if; 3.循环语句 (1).while循环技术分享[label:] WHILE expression DO 技术分享 技术分享statements 技术分享 技术分享END WHILE [label] ; 技术分享

(2).loop循环技术分享[label:] LOOP 技术分享 技术分享statements 技术分享 技术分享END LOOP [label];

(3).repeat until循环技术分享[label:] REPEAT 技术分享 技术分享statements 技术分享 技术分享UNTIL expression 技术分享 技术分享END REPEAT [label] ;

五.其他常用命令

1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等 2.show create procedure sp_name 显示某一个存储过程的详细信息

mysql存储过程中要用到的运算符

mysql存储过程学习总结-操作符

算术运算符

+     加   SET var1=2+2;       4 -     减   SET var2=3-2;       1 *     乘   SET var3=3*2;       6 /     除   SET var4=10/3;      3.3333 DIV   整除 SET var5=10 DIV 3;  3 %     取模 SET var6=10%3 ;     1

比较运算符

>            大于 1>2 False <            小于 2<1 False <=           小于等于 2<=2 True >=           大于等于 3>=2 True BETWEEN      在两值之间 5 BETWEEN 1 AND 10 True NOT BETWEEN  不在两值之间 5 NOT BETWEEN 1 AND 10 False IN           在集合中 5 IN (1,2,3,4) False NOT IN       不在集合中 5 NOT IN (1,2,3,4) True =            等于 2=3 False <>, !=       不等于 2<>3 False <=>          严格比较两个NULL值是否相等 NULL<=>NULL True LIKE         简单模式匹配 "Guy Harrison" LIKE "Guy%" True REGEXP       正则式匹配 "Guy Harrison" REGEXP "[Gg]reg" False IS NULL      为空 0 IS NULL False IS NOT NULL  不为空 0 IS NOT NULL True

逻辑运算符

与(AND)

AND

TRUE

FALSE

NULL

TRUE

TRUE

FALSE

NULL

FALSE

FALSE

FALSE

NULL

NULL

NULL

NULL

NULL

或(OR)

OR

TRUE

FALSE

NULL

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

NULL

NULL

TRUE

NULL

NULL

异或(XOR)

XOR

TRUE

FALSE

NULL

TRUE

FALSE

TRUE

NULL

FALSE

TRUE

FALSE

NULL

NULL

NULL

NULL

NULL

位运算符

|   位或 &   位与 <<  左移位 >>  右移位 ~   位非(单目运算,按位取反)

 

mysq存储过程中常用的函数,字符串类型操作,数学类,日期时间类。

mysql存储过程基本函数

一.字符串类 

CHARSET(str) //返回字串字符集 CONCAT (string2  [,... ]) //连接字串 INSTR (string ,substring ) //返回substring首次在string中出现的位置,不存在返回0 LCASE (string2 ) //转换成小写 LEFT (string2 ,length ) //从string2中的左边起取length个字符 LENGTH (string ) //string长度 LOAD_FILE (file_name ) //从文件读取内容 LOCATE (substring , string  [,start_position ] ) 同INSTR,但可指定开始位置 LPAD (string2 ,length ,pad ) //重复用pad加在string开头,直到字串长度为length LTRIM (string2 ) //去除前端空格 REPEAT (string2 ,count ) //重复count次 REPLACE (str ,search_str ,replace_str ) //在str中用replace_str替换search_str RPAD (string2 ,length ,pad) //在str后用pad补充,直到长度为length RTRIM (string2 ) //去除后端空格 STRCMP (string1 ,string2 ) //逐字符比较两字串大小, SUBSTRING (str , position  [,length ]) //从str的position开始,取length个字符, 注:mysql中处理字符串时,默认第一个字符下标为1,即参数position必须大于等于1mysql> select substring(‘abcd‘,0,2); +-----------------------+ | substring(‘abcd‘,0,2) | +-----------------------+ |                       | +-----------------------+ 1 row in set (0.00 sec) mysql> select substring(‘abcd‘,1,2); +-----------------------+ | substring(‘abcd‘,1,2) | +-----------------------+ | ab                    | +-----------------------+ 1 row in set (0.02 sec) TRIM([[BOTH|LEADING|TRAILING] [padding] FROM]string2) //去除指定位置的指定字符 UCASE (string2 ) //转换成大写 RIGHT(string2,length) //取string2最后length个字符 SPACE(count) //生成count个空格 

二.数学类

ABS (number2 ) //绝对值 BIN (decimal_number ) //十进制转二进制 CEILING (number2 ) //向上取整 CONV(number2,from_base,to_base) //进制转换 FLOOR (number2 ) //向下取整 FORMAT (number,decimal_places ) //保留小数位数 HEX (DecimalNumber ) //转十六进制 注:HEX()中可传入字符串,则返回其ASC-11码,如HEX(‘DEF‘)返回4142143 也可以传入十进制整数,返回其十六进制编码,如HEX(25)返回19 LEAST (number , number2  [,..]) //求最小值 MOD (numerator ,denominator ) //求余 POWER (number ,power ) //求指数 RAND([seed]) //随机数 ROUND (number  [,decimals ]) //四舍五入,decimals为小数位数]注:返回类型并非均为整数,如: (1)默认变为整形值 mysql> select round(1.23); +-------------+ | round(1.23) | +-------------+ |           1 | +-------------+ 1 row in set (0.00 sec) mysql> select round(1.56); +-------------+ | round(1.56) | +-------------+ |           2 | +-------------+ 1 row in set (0.00 sec) (2)可以设定小数位数,返回浮点型数据 mysql> select round(1.567,2); +----------------+ | round(1.567,2) | +----------------+ |           1.57 | +----------------+ 1 row in set (0.00 sec) SIGN (number2 ) //返回符号,正负或0 SQRT(number2) //开平方

  三.日期时间类  

ADDTIME (date2 ,time_interval ) //将time_interval加到date2 CONVERT_TZ (datetime2 ,fromTZ ,toTZ ) //转换时区 CURRENT_DATE (  ) //当前日期 CURRENT_TIME (  ) //当前时间 CURRENT_TIMESTAMP (  ) //当前时间戳 DATE (datetime ) //返回datetime的日期部分 DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间 DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime DATE_SUB (date2 , INTERVAL d_value d_type ) //在date2上减去一个时间 DATEDIFF (date1 ,date2 ) //两个日期差 DAY (date ) //返回日期的天 DAYNAME (date ) //英文星期 DAYOFWEEK (date ) //星期(1-7) ,1为星期天 DAYOFYEAR (date ) //一年中的第几天 EXTRACT (interval_name  FROM date ) //从date中提取日期的指定部分 MAKEDATE (year ,day ) //给出年及年中的第几天,生成日期串 MAKETIME (hour ,minute ,second ) //生成时间串 MONTHNAME (date ) //英文月份名 NOW (  ) //当前时间 SEC_TO_TIME (seconds ) //秒数转成时间 STR_TO_DATE (string ,format ) //字串转成时间,以format格式显示 TIMEDIFF (datetime1 ,datetime2 ) //两个时间差 TIME_TO_SEC (time ) //时间转秒数] WEEK (date_time [,start_of_week ]) //第几周 YEAR (datetime ) //年份 DAYOFMONTH(datetime) //月的第几天 HOUR(datetime) //小时 LAST_DAY(date) //date的月的最后日期 MICROSECOND(datetime) //微秒 MONTH(datetime) //月 MINUTE(datetime) //分

  附:可用在INTERVAL中的类型 DAY ,DAY_HOUR ,DAY_MINUTE ,DAY_SECOND ,HOUR ,HOUR_MINUTE ,HOUR_SECOND ,MINUTE ,MINUTE_SECOND,MONTH ,SECOND ,YEAR

MYSql存储过程的作用及语法

标签:

小编还为您整理了以下内容,可能对您也有帮助:

什么是mysql存储过程

MySQL中的存储过程指的是存储在数据库中的SQL语句集合,当创建好存储过程后在运行时提供所需参数,存储过程就可以以代码指定的方式使用参数执行并返回值

在MySQL中提供了创建存储过程的能力。存储过程是MySQL以及其他数据库管理系统中的强大功能。接下来在文章中将为大家具体介绍MySQL中的存储过程,具有一定的参考作用,希望对大家有所帮助。

【推荐课程:MySQL教程】

存储过程:

存储过程指的是存储在数据库中的SQL语句的集合。存储过程它可以包含业务逻辑,这是区分存储过程和视图的关键之一。另外存储过程还可以接受参数,我们可以在存储过程中设置变量,写入语句等。

存储过程如何工作

首先要先创建一个存储过程然后再运行。在运行的过程中需要提供它所需要的参数,然后存储过程将以代码指定的任何方式使用参数执行。例如,编写一个接受FruitId参数的存储过程。然后在存储过程可以获取该参数并使用它来检查该特定水果的库存。因此我们可以调用存储过程,即每次使用不同的水果ID它都将返回一个值,并显示该库存中有多少水果。

创建存储过程

我们可以通过CREATE PROCEDURE语句创建存储过程

CREATE PROCEDURE demo_name(p_1 INT)

BEGIN

...code goes here...

END;demo_name指的是存储过程的名称,括号是必须的,如果里面不包含任何参数则括号可以为空

存储过程的主体是介于BEGIN和END关键字之间。这些关键字用于编写复合语句。复合语句可以包含多个语句,如果需要,可以嵌套这些语句。

例:创建一个存储过程名为FruitStock:

DELIMITER //

CREATE PROCEDURE FruitStock(thisFruit SMALLINT)

BEGIN

SELECT

Fruit.FruitName,

Fruit.Inventory,

Units.UnitName

FROM

Fruit INNER JOIN Units ON

Fruit.UnitId = Units.UnitId

WHERE

Fruit.FruitId = thisFruit;

END //

DELIMITER ;创建好了一个存储过程,接下来将调用这个存储过程

调用一个参数为1的ID

CALL FruitStock(1);删除存储过程

可以使用DROP PROCEDURE语句删除存储过程。

DROP PROCEDURE FruitStock;改变存储过程

在存储过程中可通过下列语句更改存储过程ALTER PROCEDURE。

需要注意要更改存储过程的主体或其任何参数时,需要删除该过程然后再次创建

例:添加Fruit.FruitId所要返回的列表

DROP PROCEDURE IF EXISTS FruitStock;

DELIMITER //

CREATE PROCEDURE FruitStock(thisFruit SMALLINT)

BEGIN

SELECT

Fruit.FruitId,

Fruit.FruitName,

Fruit.Inventory,

Units.UnitName

FROM

Fruit INNER JOIN Units ON

Fruit.UnitId = Units.UnitId

WHERE

Fruit.FruitId = thisFruit;

END //

DELIMITER ;总结:

MySQL创建存储过程

存储过程是数据库管理中常用的技术之一,可以很方便的做些类似数据统计、数据分析等工作,市场上的SQL SERVER、ORACLE、MySQL都支持存储过程,但不同的数据库环境语法结构有点区别,本案例给大家讲解下MySQL创建存储过程的方法
使用常规的创建存储过程方法,发现各种报错,无法执行,在SQL SERVER下很容易成功的写法,在MySQL下居然不行,经过查找资料发现在MySQL中需要设置DELIMITER

这是正确的存储过程写法,可以成功执行,相比较上图的报错,增加了DELIMITER,简单解释下这个命令的用途,在MySQL中每行命令都是用“;”结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而DELIMITER原本就是“;”的意思,因此用这个命令转换一下“;”为“//”,这样只有收到“//”才认为指令结束可以执行

该存储过程的功能是将“编号”这行记录的流水号+1,在执行存储过程之前,我们查看下数据库中该表的数据情况

执行存储过程使用call命令,与SQL SERVER的exec用法一样,执行后发现了返回值,流水号已经+1

为了确认数据库中数据确实修改,重新执行遍查询操作

该例中使用了start transaction;事务处理,功能就不解释了,但用法与SQL SERVER有点区别,事实上MySQL在很多地方的语法上与SQL SERVER不一样,但功能类似,需要大家多接触,多练习
还有一点需要补充下,在MySQL中似乎没有修改存储过程的命令,执行alter procere报错

分析了下mysql workbench工具中的alter命令,其实是先执行的drop然后在create,没有直接用alter操作

MySQL创建存储过程

存储过程是数据库管理中常用的技术之一,可以很方便的做些类似数据统计、数据分析等工作,市场上的SQL SERVER、ORACLE、MySQL都支持存储过程,但不同的数据库环境语法结构有点区别,本案例给大家讲解下MySQL创建存储过程的方法
使用常规的创建存储过程方法,发现各种报错,无法执行,在SQL SERVER下很容易成功的写法,在MySQL下居然不行,经过查找资料发现在MySQL中需要设置DELIMITER

这是正确的存储过程写法,可以成功执行,相比较上图的报错,增加了DELIMITER,简单解释下这个命令的用途,在MySQL中每行命令都是用“;”结尾,回车后自动执行,在存储过程中“;”往往不代表指令结束,马上运行,而DELIMITER原本就是“;”的意思,因此用这个命令转换一下“;”为“//”,这样只有收到“//”才认为指令结束可以执行

该存储过程的功能是将“编号”这行记录的流水号+1,在执行存储过程之前,我们查看下数据库中该表的数据情况

执行存储过程使用call命令,与SQL SERVER的exec用法一样,执行后发现了返回值,流水号已经+1

为了确认数据库中数据确实修改,重新执行遍查询操作

该例中使用了start transaction;事务处理,功能就不解释了,但用法与SQL SERVER有点区别,事实上MySQL在很多地方的语法上与SQL SERVER不一样,但功能类似,需要大家多接触,多练习
还有一点需要补充下,在MySQL中似乎没有修改存储过程的命令,执行alter procere报错

分析了下mysql workbench工具中的alter命令,其实是先执行的drop然后在create,没有直接用alter操作

mysql存储过程是什么意思?什么时候会用到,主要用来做什么?

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。
存储过程就是有业务逻辑和流程的集合,
可以在存储过程中创建表,更新数据,
删除等等。
你可以理解为用sql语句开发的一个
类和函数。
为什么要使用存储过程
通过把处理封装在容易使用的单元中,简化复杂的操作(正如前面例子所述)。
由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。

mysql存储过程是什么意思?什么时候会用到,主要用来做什么?

存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。可将其视为批件,虽然它们的作用不仅限于批处理。
存储过程就是有业务逻辑和流程的集合,
可以在存储过程中创建表,更新数据,
删除等等。
你可以理解为用sql语句开发的一个
类和函数。
为什么要使用存储过程
通过把处理封装在容易使用的单元中,简化复杂的操作(正如前面例子所述)。
由于不要求反复建立一系列处理步骤,这保证了数据的完整性。如果所有开发人员和应用程序都使用同一(试验和测试)存储过程,则所使用的代码都是相同的。这一点的延伸就是防止错误。需要执行的步骤越多,出错的可能性就越大。防止错误保证了数据的一致性。
简化对变动的管理。如果表名、列名或业务逻辑(或别的内容)有变化,只需要更改存储过程的代码。使用它的人员甚至不需要知道这些变化。

mysql存储过程怎么写

MySQL 存储过程是一些 SQL 语句的集合,比如有的时候我们可能需要一大串的 SQL 语句,或者说在编写 SQL 语句的过程中还需要设置一些变量的值,这个时候我们就完全有必要编写一个存储过程。下面我们来介绍一下如何创建一个存储过程。

语法格式:

可以使用 CREATE PROCEDURE 语句创建存储过程。

语法格式如下:

CREATE PROCEDURE <过程名> ( [过程参数[,?] ] ) <过程体>

[过程参数[,?] ] 格式

[ IN | OUT | INOUT ] <参数名> <类型>语法说明如下:

1) 过程名

存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即 db_name.sp_name。需要注意的是,名称应当尽量避免选取与 MySQL 内置函数相同的名称,否则会发生错误。

2) 过程参数

存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的 MySQL 数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有 1 个或多个参数。

MySQL 存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用 IN、OUT 和 INOUT 三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。需要注意的是,参数的取名不要与数据表的列名相同,否则尽管不会返回出错信息,但是存储过程的 SQL 语句会将参数名看作列名,从而引发不可预知的结果。

3) 过程体

存储过程的主体部分,也称为存储过程体,包含在过程调用的时候必须执行的 SQL 语句。这个部分以关键字 BEGIN 开始,以关键字 END 结束。若存储过程体中只有一条 SQL 语句,则可以省略 BEGIN-END 标志。

在存储过程的创建中,经常会用到一个十分重要的 MySQL 命令,即 DELIMITER 命令,特别是对于通过命令行的方式来操作 MySQL 数据库的使用者,更是要学会使用该命令。

在 MySQL 中,服务器处理 SQL 语句默认是以分号作为语句结束标志的。然而,在创建存储过程时,存储过程体可能包含有多条 SQL 语句,这些 SQL 语句如果仍以分号作为语句结束符,那么 MySQL 服务器在处理时会以遇到的第一条 SQL 语句结尾处的分号作为整个程序的结束符,而不再去处理存储过程体中后面的 SQL 语句,这样显然不行。为解决这个问题,通常可使用 DELIMITER 命令将结束命令修改为其他字符。

语法格式如下:

DELIMITER $$语法说明如下:$$ 是用户定义的结束符,通常这个符号可以是一些特殊的符号,如两个“?”或两个“¥”等。当使用 DELIMITER 命令时,应该避免使用反斜杠“”字符,因为它是 MySQL 的转义字符。

在 MySQL 命令行客户端输入如下SQL语句。

mysql > DELIMITER ??成功执行这条 SQL 语句后,任何命令、语句或程序的结束标志就换为两个问号“??”了。

若希望换回默认的分号“;”作为结束标志,则在 MySQL 命令行客户端输入下列语句即可:

mysql > DELIMITER ;注意:DELIMITER 和分号“;”之间一定要有一个空格。在创建存储过程时,必须具有 CREATE ROUTINE 权限。可以使用 SHOW PROCEDURE STATUS 命令查看数据库中存在哪些存储过程,若要查看某个存储过程的具体信息,则可以使用 SHOW CREATE PROCEDURE <存储过程名>。

创建不带参数的存储过程

存储过程的作用是从学生成绩信息表中查询学生的成绩信息,输入的 SQL 语句和执行过程如下所示。

mysql> DELIMITER //

mysql> CREATE PROCEDURE ShowStuScore()

-> BEGIN

-> SELECT * FROM tb_students_score;

-> END //

Query OK, 0 rows affected (0.09 sec)

五、MYSQL存储过程和函数

在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中。其中包括:IF语句、CASE语句、LOOP语句、WHILE语句、REPEAT语句、LEAVE语句和ITERATE语句,它们可以进行流程控制。

五、MYSQL存储过程和函数

在MySQL中,常见的过程式SQL语句可以用在一个存储过程体中。其中包括:IF语句、CASE语句、LOOP语句、WHILE语句、REPEAT语句、LEAVE语句和ITERATE语句,它们可以进行流程控制。

MySQL数据库新特性之存储过程入门教程

在MYSQL 中 终于引入了存储过程这一新特性 这将大大增强MYSQL 的数据库处理能力 在本文中 将指导读者快速掌握MYSQL 的存储过程的基本知识 带领用户入门

  存储过程介绍

  存储过程是一组为了完成特定功能的SQL语句集 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它 存储过程可由应用程序通过一个调用来执行 而且允许用户声明变量 同时 存储过程可以接收和输出参数 返回执行存储过程的状态值 也可以嵌套调用

   存储过程的优点

  作为存储过程 有以下这些优点

  ( )减少网络通信量 调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别 可是如果存储过程包含上百行SQL语句 那么其性能绝对比一条一条的调用SQL语句要高得多

  ( )执行速度更快 存储过程创建的时候 数据库已经对其进行了一次解析和优化 其次 存储过程一旦执行 在内存中就会保留一份这个存储过程 这样下次再执行同样的存储过程时 可以从内存中直接中读取

  ( )更强的安全性 存储过程是通过向用户授予权限(而不是基于表) 它们可以提供对特定数据的访问 提高代码安全 比如防止 SQL注入

  ( ) 业务逻辑可以封装存储过程中 这样不仅容易维护 而且执行效率也高

  当然存储过程也有一些缺点 比如

   可移植性方面 当从一种数据库迁移到另外一种数据库时 不少的存储过程的编写要进行部分修改

   存储过程需要花费一定的学习时间去学习 比如学习其语法等

  在MYSQL中 推荐使用MYSQL Query Browswer()这个工具去进行存储过程的开发和管理 下面分步骤来学习MYSQL中的存储过程

   定义存储过程的结束符

  在存储过程中 通常要输入很多SQL语句 而SQL语句中每个语句以分号来结束 因此要告诉存储过程 什么位置是意味着整个存储过程结束 所以我们在编写存储过程前 先定义分隔符 我们这里定义 // 为分隔符 我们使用DELIMITER //这样的语法 就可以定义结束符了 当然你可以自己定义其他喜欢的符号

   如何创建存储过程

  下面先看下一个简单的例子 代码如下

DELIMITER //CREATEPROCEDURE `p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT  A procere BEGINSELECT Hello World ! ;END//

  下面讲解下存储过程的组成部分

   )首先在定义好终结符后 使用CREATE PROCEDURE+存储过程名的方法创建存储过程 LANGUAGE选项指定了使用的语言 这里默认是使用SQL

   )DETERMINISTIC关键词的作用是 当确定每次的存储过程的输入和输出都是相同的内容时 可以使用该关键词 否则默认为NOT DETERMINISTIC

   ) SQL SECURITY关键词 是表示调用时检查用户的权限 当值为INVOKER时 表示是用户调用该存储过程时检查 默认为DEFINER 即创建存储过程时检查

   ) MENT部分是存储过程的注释说明部分

lishixin/Article/program/MySQL/201404/30557

MySQL数据库新特性之存储过程入门教程

在MYSQL 中 终于引入了存储过程这一新特性 这将大大增强MYSQL 的数据库处理能力 在本文中 将指导读者快速掌握MYSQL 的存储过程的基本知识 带领用户入门

  存储过程介绍

  存储过程是一组为了完成特定功能的SQL语句集 经编译后存储在数据库中 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它 存储过程可由应用程序通过一个调用来执行 而且允许用户声明变量 同时 存储过程可以接收和输出参数 返回执行存储过程的状态值 也可以嵌套调用

   存储过程的优点

  作为存储过程 有以下这些优点

  ( )减少网络通信量 调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别 可是如果存储过程包含上百行SQL语句 那么其性能绝对比一条一条的调用SQL语句要高得多

  ( )执行速度更快 存储过程创建的时候 数据库已经对其进行了一次解析和优化 其次 存储过程一旦执行 在内存中就会保留一份这个存储过程 这样下次再执行同样的存储过程时 可以从内存中直接中读取

  ( )更强的安全性 存储过程是通过向用户授予权限(而不是基于表) 它们可以提供对特定数据的访问 提高代码安全 比如防止 SQL注入

  ( ) 业务逻辑可以封装存储过程中 这样不仅容易维护 而且执行效率也高

  当然存储过程也有一些缺点 比如

   可移植性方面 当从一种数据库迁移到另外一种数据库时 不少的存储过程的编写要进行部分修改

   存储过程需要花费一定的学习时间去学习 比如学习其语法等

  在MYSQL中 推荐使用MYSQL Query Browswer()这个工具去进行存储过程的开发和管理 下面分步骤来学习MYSQL中的存储过程

   定义存储过程的结束符

  在存储过程中 通常要输入很多SQL语句 而SQL语句中每个语句以分号来结束 因此要告诉存储过程 什么位置是意味着整个存储过程结束 所以我们在编写存储过程前 先定义分隔符 我们这里定义 // 为分隔符 我们使用DELIMITER //这样的语法 就可以定义结束符了 当然你可以自己定义其他喜欢的符号

   如何创建存储过程

  下面先看下一个简单的例子 代码如下

DELIMITER //CREATEPROCEDURE `p ` ()LANGUAGE SQLDETERMINISTICSQL SECURITY DEFINERMENT  A procere BEGINSELECT Hello World ! ;END//

  下面讲解下存储过程的组成部分

   )首先在定义好终结符后 使用CREATE PROCEDURE+存储过程名的方法创建存储过程 LANGUAGE选项指定了使用的语言 这里默认是使用SQL

   )DETERMINISTIC关键词的作用是 当确定每次的存储过程的输入和输出都是相同的内容时 可以使用该关键词 否则默认为NOT DETERMINISTIC

   ) SQL SECURITY关键词 是表示调用时检查用户的权限 当值为INVOKER时 表示是用户调用该存储过程时检查 默认为DEFINER 即创建存储过程时检查

   ) MENT部分是存储过程的注释说明部分

lishixin/Article/program/MySQL/201404/30557

mysql 存储过程 是什么意思

存储过程(Stored Procere)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。

一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

存储过程通常有以下优点:

    存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

    存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。

    存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。

    存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。

    存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行,能够实现对相应的数据的访问权限的,避免了非授权用户对数据的访问,保证了数据的安全。

MySQL存储过程创建的格式如下:

CREATE PROCEDURE 过程名 ([过程参数[,...]])

[特性 ...] 过程体

举例代码如下:CREATE PROCEDURE proc1(OUT s int)  

BEGIN 

    SELECT COUNT(*) INTO s FROM user;  

END

存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用","分割开。

过程体的开始与结束使用BEGIN与END进行标识。

注意:MySQL在5.0以前并不支持存储过程

存储过程在数据库中的作用是什么

第一:存储过程因为SQL语句已经预编绎过了,因此运行的速度比较快。

第二:存储过程可接受参数、输出参数、返回单个或多个结果集及返回值。向程序返回错误原因。

第三:存储过程运行比较稳定,不会有太多的错误。只要一次成功,以后都会按这个程序运行。

第四:存储过程主要是在服务器上运行,减少对客户机的压力。

第五:存储过程可以包含程序流、逻辑以及对数据库的查询。同时可以实体封装和隐藏数据逻辑。

第六:存储过程可以在单个存储过程中执行一系列SQL语句。

第七:存储过程可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。

扩展资料:

存储过程的优点:    

1、存储过程的能力大大增强了SQL语言的功能和灵活性。

2、可保证数据的安全性和完整性。

3、通过存储过程可以使没有权限的用户在控制之下间接地存取数据库,从而保证数据的安全。

4、通过存储过程可以使相关的动作在一起发生,从而可以维护数据库的完整性。

5、在运行存储过程前,数据库已对其进行了语法和句法分析,并给出了优化执行方案。这种已经编译好的过程可极大地改善SQL语句的性能。

6、可以降低网络的通信量。

7、使体现企业规则的运算程序放入数据库服务器中,以便集中控制。

参考资料:百度百科-存储过程

Top