• 存储过程


    变量variable:所有mysql变量都必须以@开头.


    存储过程
    创建语法
    create PROCEDURE 存储过程名()
    BEGIN
    select * from `user` where `name`='张三'; --执行语句.
    END

    调用语法
    call 存储过程名()

    删除存储过程
    drop PROCEDURE proce_select_name -- 注意后面是不带()
    删除存储过程时,如果存储过程不存在就会出错,如果要想不出错要这样写:
    drop PROCEDURE if EXISTS proce_select_name

    -- 创建带参数的语法。
    -- 带输入参数

    create procedure 存储过程名(
        out 参数名1 DECIMAL(8,2),
        out 参数名2 VARCHAR(50)
    )
    
    BEGIN
        select AVG(age) into 参数名1  from `user` ;
      select `name`  from `user`  where `id`='3' into 参数名2; 
    END


    CALL 存储过程名(@变量1,@变量2);
    select @变量1,@变量2;

    -- 带输入输出参数
    create PROCEDURE 存储过程名(
    IN 转入参数名1 int ,
    OUT 参数名2 VARCHAR(50)
    )

    BEGIN
    select hobby from `user`
    where id = 转入参数名1
    into 参数名2;
    END

    drop PROCEDURE if EXISTS 存储过程名

    CALL 存储过程名(转入参数,@输出变量);
    select @输出变量


    关键字解释:
    IN 把外界的值传递给存储过程使用 的变量
    OUT 定义存储过的传出变量
    INOUT 为存储过程定义传入传出变量 .
    INTO 存储过程的结果保存到相应的变量.


    --示例: 创建带参数的。
    -- 带输入参数

    create procedure proce_select_name(
        out temp_age DECIMAL(8,2),
        out temp_name VARCHAR(50)
    )
    
    BEGIN
        select AVG(age) into temp_age  from `user` ;
      select `name`  from `user`  where `id`='3' into temp_name; 
    END
    
    
    CALL proce_select_name(@age,@name);
    select @age,@name;
    
    -- 带输入输出参数
    create PROCEDURE proce_get_hobby_for_id(
        IN set_id int ,
        OUT get_hobby VARCHAR(50)
    )
    
    BEGIN
        select hobby from `user` 
        where  id =  set_id 
        into get_hobby;
    END
    
    drop PROCEDURE if EXISTS proce_get_hobby_for_id
    
    CALL proce_get_hobby_for_id(1,@hobby);
    select @hobby
    
    
    -- 智能存储过程。。
    
    create procedure proce_age_for_id
    (
        IN set_id int,
        IN is_bool BOOLEAN,
        OUT    get_age INT
    )
    
    BEGIN
        DECLARE temp_age int; -- 用DECLARE关键字定义了一个int类型的temp_age局部变量
        DECLARE extra_age int DEFAULT 5;
        
        select age from `user` where id = set_id INTO temp_age;
        
        --if 检查is_bool是否为真,如果为真就执行.  if 语句还支持elseif ,else字句. 
        if is_bool  THEN
            select temp_age + extra_age INTO temp_age;
        end if;
    
        select temp_age INTO get_age;
        
    END;
    
    CALL proce_age_for_id(3,0,@scal_age);
    select @scal_age;

    -- 查询存储过程创建语句
    show create procedure 存储过程名

    建立示例表语句

    CREATE TABLE `user` (
      
    `id` int(11) NOT NULL AUTO_INCREMENT,
     
     `name` varchar(50) DEFAULT NULL,
      
    `age` int(3
    ) 
    DEFAULT NULL,
      `hobby` varchar(100) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=gbk
  • 相关阅读:
    Redis12:客户端
    Redis11:事件
    Redis10:RDB持久化与AOF持久化
    Redis09:过期时间与删除策略、redis中的特殊线程
    Redis08:redis中的对象与存储形式
    Redis07:底层:基数树radix tree
    Redis06:底层:跳跃链表skiplist
    C++基础知识:异常处理
    C++基础知识:STL简介
    C++基础知识:泛型编程
  • 原文地址:https://www.cnblogs.com/longhs/p/4338218.html
Copyright © 2020-2023  润新知