zoukankan      html  css  js  c++  java
  • 存储过程和函数 PROCEDURE & FUNCTION

    SQL语句执行的时候,要首先编译,然后在被执行。在大型数据库系统中,为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。

    具体而言,存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次编译后,再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数来执行。

    创建存储过程

    CREATE PROCEDURE 存储过程名([IN|OUT|INOUT] 变量名 变量类型)
    BEGIN
        代码块
    END;
    IN:表示传递给存储过程,类似形参
    OUT:表示从存储过程传出
    INOUT:表示对存储过程传入和传出
    # example
    CREATE PROCEDURE orderTotal( IN orderNumber INT, OUT orderTotal DECIMAL(8,2) ) BEGIN SELECT Sum(item_price * quantity) FROM orderItems WHERE order_num = orderNumber INTO orderTotal; # INTO关键字表示把结果保存到变量中 END;

    调用存储过程

    CALL orderTotal(2005, @total);  # 所有MySQL变量都必须以@开始
    SELECT @total;  # 查看调用存储过程后变量中的值

    查看存储过程:

    SHOW CREATE PROCEDURE 存储过程名称;  # 显示用来创建一个存储过程的CREATE语句
    SHOW PROCEDURE STATUS LIKE '存储过程名称' # 显示包括何时、有谁创建等详细信息的存储过程列表

    删除存储过程

    DROP PROCEDURE [IF EXISTS] 存储过程名称;

    使用存储过程可以增强SQL语言的功能和灵活性。由于用流程控制语句编写存储过程具有很强的灵活性,所以使用存储过程可以完成复杂的判断和运算,并且可以保证数据的安全性和完整性;另外,存储过程可以使没有权限的用户在控制之下间接地存取数据库,也保证了数据的安全。

    具体而言其优点有:

    1)执行效率高

    2)减少网络流量。因为在调用的时候不需要每次都把SQL语句传输到数据库上

    3)安全机制好。通过对存储过程进行授权,从而保证安全性。

    存储过程的弊端:

    不同数据库的语法差别很大,移植困难,换了数据库,需要重新编写。

    不容易管理,把过多业务逻辑写在存储过程中不容易维护,不利于分层管理,容易混乱。

    一般存储过程适用于对性能要求较高的业务。

  • 相关阅读:
    无缝滚动轮播图
    angular 1.6指令与服务
    angular 1.6路由
    javascript 对象
    JavaScript的运算符
    初识JavaScript!
    git常用命令(二)文字版
    CSS水平垂直居中
    收藏的一些牛逼博客
    html5 学习汇总
  • 原文地址:https://www.cnblogs.com/0820LL/p/9710913.html
Copyright © 2011-2022 走看看