mysql 存储过程 是什么意思
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集
功能是将常用或复杂的工作,预先用SQL语句写好并用一个指定名称存储起来, 以后需要数据库提供与已定义好的存储过程的功能相同的服务时,只需调用 call 存储过程名字, 即可自动完成命令。
存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,可由应用程序通过一个调用来执行,而且允许用户声明变量 。
同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。
mysql 执行语句是要先编译,然后再执行的。这样如果查询并发大的时候。会浪费很多资源和时间。造成mysql进程占用资源过多,症状就是慢。
但存储过程可以把一些特别的语句封装成一个方法 ,再编译好成一个可以执行的方法,对外只要接收参数就可以了。这样就不用再编译。执行就快了
什么时候会用到?你觉得你数据库因为同时出现太多读写操作而变得慢 ,那么就要用了
主要用来提升性能。。
存储过程(Stored Procedure)是一组为了完成特定功能的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以前并不支持存储过程
用select...into语句
下面是mysql 5.0的帮助文档的:
这个SELECT语法把选定的列直接存储到变量。因此,只有单一的行可以被取回。
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
注意,用户变量名在MySQL 5.1中是对大小写不敏感的。请参阅9.3节,“用户变量”。
重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column的:
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’。
羊香脂脉: 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它.一个存储过程是一个可编程的函数,它在数据库中创建并...
秀屿区15971312942: mysql存储过程是什么意思?什么时候会用到,主要用来做什么? - ?
羊香脂脉: 存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合.可将其视为批件,虽然它们的作用不仅限于批处理. 存储过程就是有业务逻辑和流程的集合, 可以在存储过程中创建表,更新数据, 删除等等. 你可以理解为用...
秀屿区15971312942: 请问,mysql存储过程与普通的sql语句有什么区别? - ?
羊香脂脉: 存储过程和一般sql的区别就是,存储过程支持变量和判断循环之类的,你可以把一个存储过程想象为一个小的软件,这个小软件帮你处理一些复杂的sql运算.至于说存储过程查询语句更快,是因为,存储过程的执行是在服务器上,只需要传递几个简单的参数就可以,减少了网络通讯.所以比起一般程序中写的查询语句来说更快一些.基本上就是这些 希望可以帮助你理解存储过程.
秀屿区15971312942: 数据库中什么是存储过程?作用是什么? - ?
羊香脂脉: 存储过程,就是带有名字的一个程序块. 过程,就是程序块,说白了就是一段程知序. 存储过程,创建完成之后,就存储在数据库内部了,数据库帮你记着,存储过程创建的时候都有一个名字,将来你在你的程序当中,通过某种方式(不同编程语言有不同的方式),一般来讲通过这个名字,去调用存储过程,就像使用一个方法道或者函数一样,它就去做一件事!
秀屿区15971312942: 数据库存储过程是指??? - ?
羊香脂脉: 定义:常用的或很复杂的工作,预先用SQL语句写好并用一个指定的名称存储起来, 那么以后要叫数据库提供与已定义好的存储过程的功能相同的服务时,只需调用execute,即可自动完成命令. 存储过程的优点: 1.存储过程只在创造时进行编...
秀屿区15971312942: SqlDataAdapter中的存储过程是什么意思?? - ?
羊香脂脉: 存储过程是SqlServer内部一些Sql语句的集合,你可以理解成是程序中的函数.比如你有两张表:订单表及订单明细,两者是一对多的关系,插入一条订单数据后,将ID返回作为订单明细表的订单ID字段插入.如果在C#中执行Sql语句完成以上操作,要连接两次数据库,而执行存储过程只需要连接一次.再有,采用存储过程可以明确程序的层次,属于数据操作的部分由存储过程完成,这样,如果你的项目需要针对某个操作作修改,只需要修改对应的存储过程,而不需要重新编译程序.这些事存储过程的几个好处,当然不止如此,你可以百度百科中查看存储过程的相关知识.
秀屿区15971312942: mysql中的触发器和存储过程的区别是什么? - ?
羊香脂脉: Mysql的触发器相当于内部处理的一些过程,不带入和带出任何的参数. 其内部使用的参数就是新旧两条记录old和new的字段. 用于完成数据表之间的触发操作,来保证数据库的一致性、完整性. Mysql的存储过程是类似于其它编程语言中的函数的功能. 存储过程内部可以使用顺序循环和转移三种基本程序结构,而且整个存储过程可以接受和返回参数.
秀屿区15971312942: mysql 是否推荐使用存储过程?mysql的存储过程能带来什么优势以及有什么缺点呢?一般适用于什么情况? - ?
羊香脂脉:优势就是提前编译好了的存储过程,少了些分析和解释的过程提高效率,缺点就是不灵活,只能进行传入一些固定的参数进行流程化的运行.适用于接收几个参数进行多次资源操作的情况.
秀屿区15971312942: 数据库中的存储过程到底是什么?能不能举个详细的例子? - ?
羊香脂脉: 存储过程,实际就是一段写在数据库中的代码.. 由于此段数据库操作代码由服务器完成,而客户端只是进行简单的参数提交,所以,可以有效的利用服务器的强劲而减小对客户机的负合. 如:你想插入一条数据到数据库. 虽然你的要求是,...
秀屿区15971312942: 谁能讲解下mysql存储过程的实现原理 - ?
羊香脂脉: 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以看做是对编程中面向对象方法的模拟.它允许控制数据的访问方式.