MySQL基础6(存储过程)

存储过程定义:

  • 存储过程是存储在数据库目录中的一段声明性SQL语句。
  • 触发器,其他存储过程以及Java,Python,PHP等应用程序可以调用存储过程。

MySQL存储过程的优点:

  • 通常存储过程有助于提高应用程序的性能。当创建,存储过程被编译之后,就存储在数据库中。 但是,MySQL实现的存储过程略有不同。 MySQL存储过程按需编译。 在编译存储过程之后,MySQL将其放入缓存中。 MySQL为每个连接维护自己的存储过程高速缓存。 如果应用程序在单个连接中多次使用存储过程,则使用编译版本,否则存储过程的工作方式类似于查询。
  • 存储过程有助于减少应用程序和数据库服务器之间的流量,因为应用程序不必发送多个冗长的SQL语句,而只能发送存储过程的名称和参数。
  • 存储的程序对任何应用程序都是可重用的和透明的。 存储过程将数据库接口暴露给所有应用程序,以便开发人员不必开发存储过程中已支持的功能。
  • 存储的程序是安全的。 数据库管理员可以向访问数据库中存储过程的应用程序授予适当的权限,而不向基础数据库表提供任何权限。

MySQL存储过程的缺点:

  • 如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加。 此外,如果您在存储过程中过度使用大量逻辑操作,则CPU使用率也会增加,因为数据库服务器的设计不当于逻辑运算。
  • 存储过程的构造使得开发具有复杂业务逻辑的存储过程变得更加困难。
  • 很难调试存储过程。只有少数数据库管理系统允许您调试存储过程。不幸的是,MySQL不提供调试存储过程的功能。
  • 开发和维护存储过程并不容易。开发和维护存储过程通常需要一个不是所有应用程序开发人员拥有的专业技能。这可能会导致应用程序开发和维护阶段的问题。

编写存储过程的语法格式

DELIMITER 
 CREATE PROCEDURE GetAllProducts()
   BEGIN
   SELECT *  FROM products;
   END 
DELIMITER ;

说明:
1.使用CREATE PROCEDURE语句创建一个新的存储过程。在CREATE PROCEDURE语句之后指定存储过程的名称。
2.BEGIN和END之间的部分称为存储过程的主体。

调用存储过程

CALL STORED_PROCEDURE_NAME();   // call存储过程的名

存储过程中声明变量和参数:

DECLARE variable_name datatype(size) DEFAULT default_value;

说明:
1.使用DECLARE语句来声明变量。在DECLARE关键字后面要指定变量名。变量名必须遵循MySQL表列名称的命名规则。
2.指定变量的数据类型及其大小。变量可以有任何MySQL数据类型,如INT,VARCHAR,DATETIME等。
3.当声明一个变量时,它的初始值为NULL。但是可以使用DEFAULT关键字为变量分配默认值。

MySQL存储过程参数

在现实应用中,开发的存储过程几乎都需要参数。这些参数使存储过程更加灵活和有用。 在MySQL中,参数有三种模式:IN,OUT或INOUT。

  • IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值,在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。
  • OUT - 可以在存储过程中更改OUT参数的值,并将其更改后新值传递回调用程序。请注意,存储过程在启动时无法访问OUT参数的初始值。
  • INOUT - INOUT参数是IN和OUT参数的组合。这意味着调用程序可以传递参数,并且存储过程可以修改INOUT参数并将新值传递回调用程序。

存储过程中定义参数的语法:

MODE param_name param_type(param_size)

说明:

1.根据存储过程中参数的目的,MODE可以是IN,OUT或INOUT。
2.param_name是参数的名称。参数的名称必须遵循MySQL中列名的命名规则。
3.在参数名之后是它的数据类型和大小。和变量一样,参数的数据类型可以是任何有效的MySQL数据类型。
4.如果存储过程有多个参数,则每个参数由逗号(,)分隔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值