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、存储过程修改不了过程体,如要修改,则先删除再重新创建

  • 相关阅读:
    我要好offer之 二叉树大总结
    我要好offer之 字符串相关大总结
    楼层扔鸡蛋问题[转]
    Linux System Programming 学习笔记(十一) 时间
    Linux System Programming 学习笔记(十) 信号
    Linux System Programming 学习笔记(九) 内存管理
    Linux System Programming 学习笔记(八) 文件和目录管理
    Linux System Programming 学习笔记(七) 线程
    Linux System Programming 学习笔记(六) 进程调度
    APUE 学习笔记(十一) 网络IPC:套接字
  • 原文地址:https://www.cnblogs.com/Yanjy-OnlyOne/p/12628599.html
Copyright © 2011-2022 走看看