数据库的存储过程、触发器和一些语法

  created  by  鱼鱼 {{tag}}
创建于 2019年06月12日 10:29:10 最后修改于 2019年06月12日 14:01:26

        本篇文章讲述基于MySQL的存储过程触发器和一些相关的语法

存储过程

        在数据库中,存储过程是指将复用度很高并且不需要通过程序进行预编译的的SQL语句预先写好存放起来(此处所指的为用户定义在数据库中的存储过程),在需要时直接通过call调用。先看一个例子(注意,这不是创建存储过程的语句):

CREATE PROCEDURE DeleteExpiredCache
BEGIN
    SELECT * FROM mimo_cache WHERE create_time <= DATE_SUB(CURDATE(),INTERVAL 10 DAY);
    DELETE FROM mimo_cache WHERE create_time <= DATE_SUB(CURDATE(),INTERVAL 10 DAY);
END

        其中使用了日期相关的函数,DATE_SUB(CURDATE(),INTERCAL 10 DAY)代表当前时间前推十天。这个存储过程作用是查出十天前的数据然后将其删除。

    修改分隔符

        MySQL默认的分隔符是" ; ",这样一来定义存储过程就会因为 ; 被打断,所以在定义存储过程前后需要修改分隔符,使用DELIMITER关键字跟随分隔符,实际创建存储过程语句为:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE ……
BEGIN
    #……
END$$

DELIMITER ;    #还原分隔符

    传入参数和权限

       存储过程也可以传值,在创建时定义参数列表:

CREATE DEFINER=`root`@`%` PROCEDURE `test`(IN i INTEGER,IN v VARCHAR(32))

        其中,DEFINER定义了对应的权限。i和v便是该存储过程的参数列表,IN此处指参数类型,可选为IN、OUT和INOUT:

  • IN:输入参数,相当于参数传递,运行存储过程后不改变传入值;

  • OUT:输出参数,不会接受传入的值(会显示为NULL),但是会改变该值并传出;

  • INOUT:结合以上两点,既可以接收参数,也能改变值并传出

例如:

SET @pai = 1;
SET @pao = 1;
……
CREATE PROCEDURE paramTest(IN p_in INT,OUT p_out INT)
BEGIN
    SELECT p_out;    # NULL
    SELECT p_in;     # 1
    SET p_out=2;
    SET p_in=2;
END
……
CALL nd(@pai,@pao);  
@SELECT @pai;   # 1
@SELECT @pao;   # 2

        一般使用存储过程都是IN参数,无论如何,都不推荐使用INOUT。

评论区
评论
{{comment.creator}}
{{comment.createTime}} {{comment.index}}楼
评论

数据库的存储过程、触发器和一些语法

数据库的存储过程、触发器和一些语法

        本篇文章讲述基于MySQL的存储过程触发器和一些相关的语法

存储过程

        在数据库中,存储过程是指将复用度很高并且不需要通过程序进行预编译的的SQL语句预先写好存放起来(此处所指的为用户定义在数据库中的存储过程),在需要时直接通过call调用。先看一个例子(注意,这不是创建存储过程的语句):

CREATE PROCEDURE DeleteExpiredCache
BEGIN
    SELECT * FROM mimo_cache WHERE create_time <= DATE_SUB(CURDATE(),INTERVAL 10 DAY);
    DELETE FROM mimo_cache WHERE create_time <= DATE_SUB(CURDATE(),INTERVAL 10 DAY);
END

        其中使用了日期相关的函数,DATE_SUB(CURDATE(),INTERCAL 10 DAY)代表当前时间前推十天。这个存储过程作用是查出十天前的数据然后将其删除。

    修改分隔符

        MySQL默认的分隔符是" ; ",这样一来定义存储过程就会因为 ; 被打断,所以在定义存储过程前后需要修改分隔符,使用DELIMITER关键字跟随分隔符,实际创建存储过程语句为:

DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE ……
BEGIN
    #……
END$$

DELIMITER ;    #还原分隔符

    传入参数和权限

       存储过程也可以传值,在创建时定义参数列表:

CREATE DEFINER=`root`@`%` PROCEDURE `test`(IN i INTEGER,IN v VARCHAR(32))

        其中,DEFINER定义了对应的权限。i和v便是该存储过程的参数列表,IN此处指参数类型,可选为IN、OUT和INOUT:

例如:

SET @pai = 1;
SET @pao = 1;
……
CREATE PROCEDURE paramTest(IN p_in INT,OUT p_out INT)
BEGIN
    SELECT p_out;    # NULL
    SELECT p_in;     # 1
    SET p_out=2;
    SET p_in=2;
END
……
CALL nd(@pai,@pao);  
@SELECT @pai;   # 1
@SELECT @pao;   # 2

        一般使用存储过程都是IN参数,无论如何,都不推荐使用INOUT。


数据库的存储过程、触发器和一些语法2019-06-12鱼鱼

{{commentTitle}}

评论   ctrl+Enter 发送评论