zoukankan      html  css  js  c++  java
  • mysql存储过程

    SQL命令执行过程:

    如果可以省去其中语法分析和语法编译的环节,执行效率就会提高;

    什么是存储过程?

    存储过程是SQL语句与控制语句预编译的集合,以一个名称存储并作为一个单元处理;

    简单来说是:多条相同的SQL命令执行时每次都会分析、编译、执行,而存储过程只在第一次执行时分析、编译,之后每次调用都会直接调用编译的结果,这样效率就会提高。

    存储过程的优点:

    1、增强了SQL的功能和灵活性(存储过程中可以加入多条判断语句,根据判断结果不同,执行的结果也会不同)

    2、提升了执行的效率(存储过程只在第一次执行时会分析语句、编译语句)

    3、减少网络流量(执行普通SQL传递的字符多,越复杂的SQL语句传递的字符越多,存储过程的字符数稳定且少)

    创建存储过程:

    1、没有任何参数:

       CREATE PROCEDURE sp1() SELECT NOW();

    使用存储过程,不带参数的情况下:(加不加括号都可以):

    (1)CALL sp1;

     

    (2)CALL sp1();

    删除存储过程:

      DROP PROCEDURE 存储过程名

      列:DROP PROCEDURE sp1;

    2、有一个参数:参数是id,使用removeUserById(),传递一个id参数,将参数传递给DELETE语句

       CREATE PROCEDURE removeUserById(IN p_id INT UNSIGNED)

       -> DELETE FROM users WHERE id=p_id;

       执行完成后:

    (1)首先查询表中所有数据:

        

    (2)使用建立的存储过程:CALL removeUserById(17);

     

    (3)查询表中数据:

     

    3、创建拥有返回值的存储过程:根据id删除并返回删除之后的总数

      改变结束符号为“//” 在创建存储过程时会用到“;” 不能让它结束

      DELIMITER //

      创建存储过程:输入用IN ,参数是p_id, INT 类型,UNSIGNED 代表无符号整型,返回参数用OUT,参数名 userNums,有两条语句用BEGIN和END包起来,SELECT ...INTO...将查询到的结果存入INTO后面的变量userNums

      CREATE PROCEDURE removeUserAndReturnUserNums(IN p_id INT UNSIGNED,OUT userNums INT UNSIGNED)

      ->BEGIN

      ->DELETE  FROM users WHERE id=p_id;

      ->SELECT COUNT(id) FROM users INTO userNums;

      ->END

      ->// 

      将结束符号改回原来的“;” 

      DELIMITER ;

     

      查询users表中的记录总数:

      

      使用存储过程并查看:@nums变量来接收返回的总数

                                   

     如果有多个参数以,号分隔,输入参数用IN ,返回参数用OUT,类型与表中字段类型一致。       

  • 相关阅读:
    docker部署数据库
    JAVA 删除Map中元素(JDK8)
    Docker 学习记录基于Linux
    Liunx 操作命令学习记录
    NACOS 认识和学习
    SpringCloud 学习及其相关组件的认识
    springBoot 配置文件的优先级
    配置redisTemplate的序列化
    springBoot 使用测试类报错
    注解反射的认识
  • 原文地址:https://www.cnblogs.com/YpfBolg/p/10853002.html
Copyright © 2011-2022 走看看