认识

说明

  • mysql存储过程可以封装SQL与剧集,用于处理一些比较复杂的业务逻辑
  • 通常情况下,执行SQL语句时,是一条一条执行的,一般复杂的逻辑是使用java代码来实现的

    优点

  • 将部分业务逻辑与java代码分开

  • 先编译再保存,效率会高于单独一条一条执行
  • 方便优化(非常直观地修改SQL语句)

    缺点

  • 面向过程面层,复杂的业务逻辑维护成本更高

  • 调试不方便
  • 可移植性差

    基本指令

    自定义语句结束符

  • DELIMITER $$

    • 将语句的结束符号从分号;临时改为两个$$(可以是自定义)
    • 这样使得分号直接传递给mysql服务器,而不是在本地的mysql客户端被解析
    • 使用结束后,需要将结束符恢复为分号(执行delimiter;)

      创建存储过程

  • create procedure 存储过程名(参数)

  • CREATE PROCEFURE ([IN|OUT|INOUT] )

    • IN表示调用者向过程传入值、OUT表示过程向调用者传出值,INOUT既表示调用者向过程传入值,又表示过程向调用者传出值
    • param_type:参数的类型,比如int

      创建存储过程体

  • create function 存储函数名(参数)

    开始存储过程

  • BEGIN

    结束存储过程

  • END

    系统变量定义

  • DECLARE default

  • 定义的变量不能等同于入参的量,入参的相当于是常量,如果要在赋值中使用,应该用select来获取它的返回值

    1. update system_organization set parent_id = (select parentId)

    用户变量定义

  • 定义即赋值

  • 等同于入参时的量,可以在赋值中使用

    SET @form_id = (SELECT id FROM system_form WHERE long_desc = form_name);
    

    变量赋值

  • SET @=

    调用存储过程

  • call sp_name[参数]