关于mysql存储过程的一些心得

首先说一下什么叫存储过程。个人认为存储过程的作用就像java中封装的一个方法。

如果我们需要频繁执行一个复杂的sql语句,我们只需要将该sql语句写进一个存储过程,再执行该存储过程即可。

而存储过程就是将sql封装起来后使用它只需要调用而不需要再次编译。


存储过程的详解网上有许许多多的文章,并且说的都不错,这里不再过多叙述(注:你用的什么数据库,根据这个数据库查对应的存储过程语法)。

在这里我说一下许多新手第一次在mysql用存储过程可能会遇到的一些问题。


创建存储过程,大多数教程中会让你这样创建:

CREATE PROCEDURE demo()
  BEGIN
    SELECT NOW() FROM DUAL;
  END;
这么创建在有些数据库中是没问题的(如oracle),但是有些新人用该存储过程语句在mysql执行发现会报以下错:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3

这是因为mysql默认以分号作为sql语句的结束来进行执行。因此内部的sql语句的";"和存储过程结束语end后的";"冲突,会导致编译错误。

因此需要临时定义一个新的分隔符(大多数用"//"和"$$"来定义)以区分sql和end后的分隔符的区别,这样只有收到新定义的分隔符才认为指令结束可以执行。

新的分隔符用DELIMITER来定义

因此,mysql应该这样创建存储过程:

DELIMITER //
CREATE PROCEDURE demo()
  BEGIN
    SELECT NOW() FROM DUAL;
  END//

为了防止定义的存储过程名重复导致存储过程创建失败,一般前面还要先删除存在的存储过程:

DROP PROCEDURE IF EXISTS demo;
DELIMITER //
CREATE PROCEDURE demo()
  BEGIN
    SELECT NOW() FROM DUAL;
  END//


上面说过,存储过程其实类似一个java方法,想要实现方法里的功能需要先调用该方法。因此如果你想执行存储过程里的sql语句,你还需要通过call命令来执行存储过程。

 CALL demo();
我刚接触存储过程的时候,创建了存储过程后发现里面的sql无论如何都执行不了,后来一了解才知道原来是我没有执行它,非常低级的一个错误!!!


存储过程的用处与弊端:
存储过程一般用于个别对性能要求较高的业务,还有在mysql数据库中实现事务。
而不同数据库,语法差别很大,移植困难,不利于分层管理,把过多业务逻辑写在存储过程不好维护,这是它的弊端
因此其它时候存储过程的必要性不是很大,少用。





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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值