• MySQL:MySQL 存储过程


    MySQL 存储过程(了解)

    1 什么是存储过程

    • MySQL 5.0 版本开始支持存储过程
    • 存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据 库对象。
    • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过 指定存储过程的名字并给定参数(需要时)来调用执行。
    • 简单理解: 存储过程其实就是一堆 SQL 语句的合并。中间加入了一些逻辑控制

     

    2 存储过程的优缺点

    优点:

      <1>存储过程一旦调试完成后,就可以稳定运行,(前提是,业务需求要相对稳定,没有变化)

      <2>存储过程减少业务系统与数据库的交互,降低耦合,数据库交互更加快捷(应用服务器,与 数据库服务器不在同一个地区)

    缺点:

      <1> 在互联网行业中,大量使用MySQL,MySQL的存储过程与Oracle的相比较弱,所以较少使用,并且互联网行业需求变化较快也是原因之一

      <2> 尽量在简单的逻辑中使用,存储过程移植十分困难,数据库集群环境,保证各个库之间存储 过程变更一致也十分困难。

      <3> 阿里的代码规范里也提出了禁止使用存储过程,存储过程维护起来的确麻烦;

       

    3 存储过程的创建方式

    方式1

    1) 数据准备

    创建商品表 与 订单表

    # 商品表
    CREATE TABLE goods(
    gid INT,
    NAME VARCHAR(20),
    num INT -- 库存
    );
    #订单表
    CREATE TABLE orders( oid INT, gid INT, price INT -- 订单价格 );
    # 向商品表中添加3条数据
    INSERT INTO goods VALUES(1,'奶茶',20); INSERT INTO goods VALUES(2,'绿茶',100); INSERT INTO goods VALUES(3,'花茶',25)

    2) 创建简单的存储过程

    语法格式

    DELIMITER $$ -- 声明语句结束符,可以自定义 一般使用$$
    CREATE PROCEDURE 过程名称() -- 声明存储过程
    BEGIN -- 开始编写存储过程
    -- 要执行的操作
    END $$ -- 存储过程结束

    需求: 编写存储过程, 查询所有商品数据

    DELIMITER $$
    CREATE PROCEDURE goods_proc()
    BEGIN
      select * from goods;
    END $$

    3) 调用存储过程

    语法格式

    call 存储过程名
    -- 调用存储过程 查询goods表所有数据
    call goods_proc;

    方式2

    1) IN 输入参数:表示调用者向存储过程传入值

    CREATE PROCEDURE 存储过程名称(IN 参数名 参数类型)

    2) 创建接收参数的存储过程

    需求: 接收一个商品id, 根据id删除数据

    DELIMITER $$
    CREATE PROCEDURE goods_proc02(IN goods_id INT)
    BEGIN
        DELETE FROM goods WHERE gid = goods_id ;
    END $$

    3) 调用存储过程 传递参数

    # 删除 id为2的商品
    CALL goods_proc02(2)

    方式3

    1) 变量赋值

    SET @变量名=

    2) OUT 输出参数:表示存储过程向调用者传出值

    OUT 变量名 数据类型

    3) 创建存储过程

    需求: 向订单表 插入一条数据, 返回1,表示插入成功
    # 创建存储过程 接收参数插入数据, 并返回受影响的行数
    DELIMITER $$
    CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT
    out_num INT)
    BEGIN
        -- 执行插入操作
        INSERT INTO orders VALUES(o_oid,o_gid,o_price);
        -- 设置 num的值为 1
        SET @out_num = 1;
        -- 返回 out_num的值
        SELECT @out_num;
    END $$

    4) 调用存储过程

    # 调用存储过程插入数据,获取返回值
    CALL orders_proc(1,2,30,@out_num);

     

  • 相关阅读:
    URL中“#”
    2、Distributed Optimization
    转:增强学习(二)----- 马尔可夫决策过程MDP
    转:强化学习(Reinforcement Learning)
    强化学习学习资料
    转:A Painless Q-learning Tutorial (一个 Q-learning 算法的简明教程)
    1、通过搜索进行问题求解
    CMOS与BIOS
    转:Spring-session & redis 子域名共享session
    基于 token 的认证应用
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15023546.html
Copyright © 2020-2023  润新知