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都被封装在了存储过程内部。

  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/andydao/p/2956458.html
Copyright © 2011-2022 走看看