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

    先给大家介绍Myql中两个两个全局变量:

    >SHOW PROCESSLIST;  #显示调用当前数据库的进程

    >SHOW VARIABLES ;   #显示当前数据库中各全局变量的设置

     存储过程

    >显示MYSQL中的所有的存储过程(所有的数据库中):

    show procedure status;

    效果等同于:select * from mysql.proc;

    若要查询当前Mysql下面某个库中含有的所有存储过程:

    select * from mysql.proc where db="数据库名";

    >显示某个存储过程创建的详细代码:

    show create procedure sp_works ;

    结果如下:

    DROP PROCEDURE IF EXISTS sp_works;
    DELIMITER //

    CREATE PROCEDURE `sp_works`(
    IN name_in varchar(30),
    OUT id_out int,
    OUT name_out varchar(30),
    OUT theme_out varchar(200)
    )
    begin
    IF name_in IS NULL OR name_in = '' then
    SELECT '输入条件为空不返回任何记录' INTO name_out;
    ELSE
    select id,renrenName,theme into id_out,name_out,theme_out from works_00 where renrenName like name_in LIMIT 1;
    END IF;
    END //

    DELIMITER ;

    调入存储过程如下:

    call sp_works('%鹏%',@id_out,@name_out,@themel_out);

    第一个是传人参数,第二个、三个、四个是传出参数

    select @id_out, @name_out ;

     Mysql中DELIMITER是分隔符,也就是一条sql语句的结束符号,Mysql的默认分隔符是";",在存储过程、函数、触发器、游标等代码中,因为可能包含很多";"这样的分隔符,所以一个存储过程没有执行完遇到";"就会报错,所以要把分隔符修改一下,一般修改为"//",当执行完后再把Mysql的分隔符还原为";"。

    DROP PROCEDURE IF EXISTS sp_works; 意思是若存在此存储过程就删除。

    存储过程demo2:

    drop procedure  if exists  sp_binary_table;
    delimiter //
    create procedure sp_binary_table
    (
    in  param1_in varchar(30),
    out param2_out varchar(30),
    out   param3_out  varchar(40)
    )
    begin
    select file_name,file_type into param2_out,param3_out from binary_table where file_type like param1_in limit 1;
    end;
    //
    delimiter ;

    执行此存储过程:

    call sp_binary_table('image/jpeg',@file_name,@file_type);

    select @file_name,@file_type;

    注意:

    mysql的参数赋值语句必须是只能够选出一行

    SELECT username,nickname INTO Ausername,Anickname FROM userbase WHERE userid = userid LIMIT 1 ;

    这样的语句必须要加上limit 1才行。

    另外,这种赋值语句还有个规矩就是参数名和字段名不能冲突,不然能够执行过去,但是却没有给参数赋值,这是个很隐性的错误,可以参考手册上的

    重要: SQL变量名不能和列名一样。如果SELECT ... INTO这样的SQL语句包含一个对列的参考,并包含一个与列相同名字的局部变量,MySQL当前把参考解释为一个变量的名字。例如,在下面的语句中,xname 被解释为到xname variable 的参考而不是到xname column

     Mysql存储过程只能返回单条记录,因为它没有自定义类型,这限制了Mysql中存储过程的功能,这是mysql的缺憾。

    存储过程的优点:

    >提高SQL性能:因为节省了sql语句编译和运行的过程,并节省了有些传递大量sql语句到数据库中

    >提高安全行:隐藏了表的名称和结构,并且能设置访问权限

    >简化sql语句:复杂的sql都被封装在了存储过程内部。

  • 相关阅读:
    leetcode【dynamic】【0】
    VIM 常用指令
    《Java多线程编程核心技术》笔记
    log4j配置文件详解
    CSU 1803 2016(同余公式)2016年湖南省第十二届大学生计算机程序设计竞赛
    NYOJ 1233 差值(字符串排序+大数减法)
    HDU 5723 Abandoned country(最小生成树+DFS)
    POJ 1451 T9 字典树
    POJ 2965 The Pilots Brothers' refrigerator 状态压缩+广搜
    POJ 1753 Flip game状态压缩+广搜
  • 原文地址:https://www.cnblogs.com/andydao/p/2956458.html
Copyright © 2011-2022 走看看