zoukankan      html  css  js  c++  java
  • MySQL基础 存储过程和存储函数

    区别: 1. 存储过程一旦创建就想函数一样可以调用,但是函数一定有返回值,存储过程可以有可以没有。

        2. 存储过程和视图有着相似的有点,安全,减少网络传输量,但是视图只能查不能增/删/改,存储过程可以实现更复杂的数据处理,定义变量、游标等。

    存储过程

    概念:一组经过预编译的SQL语句封装。

    执行过程:预存储MySQL服务器,需要执行的时候客户端向服务端发出调用命令,服务端可以把预编译并存储好的一系列SQL语句全部执行。

    优点: 1.具备重用性,减少程序员的开发压力。

        2.减少网络传输量:客户端不需要通过网络传输所有的SQL语句给服务器

        3.封装批量SQL的具体实现,提高查询的安全性。

    缺点: 1. 可移植性差。不能跨数据库移植,不同数据库需要重新编写。

        2. 调试困难。 少数RDMS支持过程调试,但对于复杂过程,开发和调试都不容易,虽有第三方调试工具,但是收费。

        3. 版本管理困难。当过程中的表索引发生变化,可能会导致过程失效,软件开发往往需要版本迭代,但是存储过程无版本控制,版本迭代很麻烦。

        4. 不适合高并发场景。高并发场景需要减少数据库压力,在数据库分库分表,且要求可扩展性高,此场景下存储过程就变得难以维护,增加了数据库压力。

      基于以上情况,微软、IBM等公司要去大型公司使用存储过程,而阿里则是不推荐使用存储过程。

    创建语法:

    1 #参数类型:IN|OUT|INOUT ,不写默认IN
    2 #参数数据类型INT VARCHAR...
    3 create procedure 存储过程名(参数类型 参数名 参数数据类型)
    4     # 局部变量定义 declare a varchar(10) default ''; 
    5 begin
    6    #存储过程体
    7    #变量赋值SET a = 'abc'
    8 end
    补充内容:存储过程中的变量为局部变量,若在sql中定义全局变量用@a='abc'
    调用存储过程:call 存储过程名(实参1,实参2...)

     存储函数

    函数作用:可以实现更负责的逻辑操作,提高用户对数据库的管理效率。

    创建语法

    1 create function 函数名(参数名 参数数据类型,...)
    2 returns 返回值类型
    3 begin
    4     函数体 #必须包含return语句
    5 end
    语法上与存储过程的差异
    1. procedure -> function
    2. 参数列表不需要定义参数IN|OUT|INOUT类型
    3. 多了 returns 和 return
    4. 调用语法:select 函数名(传参)
    存储函数和存储过程区别
      关键字 参数列表 调用语法 查询语法 返回值 查询语句中使用 应用场景
    存储过程 PROCEDURE IN|OUT|INOUT CALL SHOW CREATE PROCEDURE 名 0~N 不可以,过程能够操作表(建表/删表)和事务操作 一般用于更新 
    存储函数 FUNCTION/RETURNS/RETURN 无IN|OUT|INOUT SELECT SHOW CREATE FUNCTION 名 1 可以,存储过程不能操作表和事务 一般用于查询并返回值
  • 相关阅读:
    webStorm 快捷键 + 浏览器
    Linux安装nodejs和npm
    jQuery页面滚动底部加载数据
    html跳转指定位置-利用锚点
    JavaScript自定义对象
    vue v-time指令封装(接口返回时间戳 在到日期转换)
    vue 之 引入elementUI(两步走)
    小白6步搞定vue脚手架创建项目
    vue 封装组件
    npm dev run 报错
  • 原文地址:https://www.cnblogs.com/zhoujie0710/p/15784558.html
Copyright © 2011-2022 走看看