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

    ——MySQL存储过程
    1、MySQL执行语句过程:SQL语句—>MySQL引擎—>语法分析—>编译为可识别命令—>执行命令—>输出返回值—>客户端
    2、存储过程是一种预编译,将结果存储在内存中,只有在第一次时会分析和执行,在之后直接调用相应的结果即可,效率更快,并且可以返回多个值
    3、存储过程的优点:
    (1)增强了SQL语句的功能和灵活性
    (2)实现较快的执行速度
    (3)减少网络流量
    4、创建不带参数的存储过程:
    create procedure sp1() select version();
    call sp1;调用存储过程(不带参数)
    call sp1();调用存储过程(不带参数)
    +------------+
    | version() |
    +------------+
    | 5.6.47-log |
    +------------+
    5、创建带有in类型参数的存储过程,不没有返回过程:
    create procedure removeuserbyid(in id int unsigned)
    -> begin
    -> delete from user where id=id;注意id传入参数和表中字段不能相同,不然将删除所有记录,而非本来id记录
    -> end
    -> //
    以上方式不正确,下面是正确方式
    delimiter //
    create procedure remove(in id1 int unsigned)
    -> begin
    -> delete from test1 where id=id1;
    -> end
    -> //
    call remove(2) 删除id为2的记录
    6、创建带有in和out的存储过程,带返回变量,其中返回变量可以使用用@num可以表示
    delimiter //
    create procedure remove1(in pid int unsigned,out usernum int unsigned)
    -> begin
    -> delete from test1 where id =pid;
    -> select count(id) from test1 into usernum;
    -> end
    -> //
    删除id记录之后,返回剩余数据表记录总数
    call remove1(2,@nums)//
    select @nums
    7、begin end 之间的变量属于局部变量,而set @i=7称之为用户变量
    8、select row_count();是指输出影响的记录数
    9、创建多个out参数的存储过程
    delimi//
    create procedure remove2(in age1 smallint unsigned ,out deletenum smallint unsigned ,out usercounts smallint unsigned)
    -> begin
    -> delete from test1 where age=age1;
    -> select row_count() into deletenum;
    -> select count(id) from test1 into usercounts;
    -> end
    -> //
    call remove2(22,@i,@j)// 调用存储过程
    select @i,@j// 输出多个out返回值
    10、存储过程和自定义函数的区别
    (1)存储过程功能更加复杂一些,而函数针对性更强
    (2)存储过程可以返回多个值,而函数只可以有一个返回值
    (3)存储过程一般独立来执行,而函数可以作为其他SQL语句组成部分来出现
    11、存储过程修改不了过程体,如要修改,则先删除再重新创建

  • 相关阅读:
    第一次团队作业——团队展示
    TAC队--团队选题报告
    TAC 坦克队
    Leetcode题库——16.最接近的三数之和
    Leetcode题库——11.盛最多水的容器
    Leetcode题库——23.合并k个排序链表
    Leetcode题库——4.寻找两个有序数组的中位数
    Leetcode题库——15.三数之和
    Leetcode题库——12.整数转罗马数字
    Leetcode题库——19.删除链表的倒数第 n 个节点【##】
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12628599.html
Copyright © 2011-2022 走看看