zoukankan      html  css  js  c++  java
  • MySql存储过程及函数

      存储过程和函数类似于Java中的方法。

    ⒈存储过程

      一组预先编译好的sql语句的集合,理解成批处理语句。

      好处:

        ①提高代码的重用性

        ②简化操作

        ③减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

      1.创建语法 

    1 create procedure 存储过程名称(参数列表)
    2 begin
    3     存储过程体(一组合法的sql语句)
    4 end

      *参数列表包含了三部分

        ①参数模式  例如:IN

        ②参数名  例如:username

        ③参数类型  例如:varchar(20)

      参数模式:

    参数模式 说明
    IN 该参数可以作为输入,也就是说该参数需要调用方传入值。
    OUT

    该参数可以作为输出,也就是说该参数可以作为返回值。

    INOUT

    该参数既可以作为输入又可以作为输出,也就是该参数既需要

    传入值,又可以返回值

      *如果存储过程体仅只有一句话,那么begin end可以省略

      *存储过程中的每条sql语句的结尾必须加分号

      *存储过程的结尾标记可以使用delimiter重新设置。

        语法:delimiter 结束标记

        示例:delimiter $

      2.调用语法。

    1 call 存储过程名(实参列表);

      3.删除存储过程

    1 drop procedure 存储过程名;    #一次只能删除一个

      4.查看存储过程的信息

    1 show create procedure 存储过程名;

      示例:

        ①空参列表

          插入到users表中2条记录

    1 delimiter $$
    2 create procedure test1()
    3 begin
    4     insert into users(UserName,`PassWord`) values('fanqi','admin'),('gaoxing','admin');
    5 end$$
    6 
    7 call test1();

        ②创建带in模式参数的存储过程

          创建存储过程用于判断用户是否登录成功

    1 delimiter $$
    2 create procedure test2(in username VARCHAR(25),in `password` varchar(25))
    3 begin
    4     declare result int default 0;    #声明一个局部变量用于保存是否登录成功
    5     select count(*) into result from users where users.UserName = username and users.`PassWord` = password;
    6     select if(result > 0,'登录成功','登录失败');
    7 end$$
    8 
    9 call test2('fanqi','admin');

        ③创建带out模式参数的存储过程

          根据用户名,返回该用户对应的密码

    1 create procedure test3(in username VARCHAR(25),out `password` varchar(25))
    2 begin
    3     select users.`PassWord` into `password` from users where users.UserName = username limit 1;
    4 end$$
    5 
    6 set @password;
    7 call test3('fanqi',@password);
    8 select @password;

        ④创建带inout模式参数的存储过程

          传入a和b两个值,将a和b的值翻倍后返回

     1 delimiter $$
     2 create procedure test4(inout a int,inout b int)
     3 begin
     4     set a = a * 2;
     5     set b = b * 2;
     6 end$$
     7 
     8 set @a = 10, @b = 20;
     9 call test4(@a,@b);
    10 select @a,@b;

    ⒉函数

      函数和存储过程意义和好处都是一样的。它们的唯一区别就是:

        存储过程可以没有返回值,也可以有多个返回值,适合做批量插入数据、批量更新等。

        函数必须有返回值,而且只能有1个,适合做处理数据后返回1个结果。

      1.创建语法

    1 create function 函数名(参数列表) returns 返回类型
    2 begin
    3     函数体
    4 end

      *参数列表包含两部分

        ①参数名  例如:username

        ②参数类型  例如:varchar(20)

      *函数体中必须有return语句,如果没有会报错。建议将return语句放在函数体的末尾,当然,没在末尾也不报错。

      *函数体中仅有一句话,则可以省略begin end

      *函数的结尾标记也可以使用delimiter重新设置。

      2.调用语法

    1 select 函数名(参数列表);

      3.删除函数

    1 drop function 函数名;

      4.查看函数

    1 show create function 函数名;

      示例:

        ①没有参数(函数必须有返回值,而且只能有1个

          返回users表的条目数

     1 set global log_bin_trust_function_creators=TRUE;
     2 delimiter $$
     3 create function test1() returns int
     4 begin
     5     declare num int default 0;
     6     select count(*)  into num from users;
     7     return num;
     8 end$$
     9 
    10 select test1();

        ②有参数(函数必须有返回值,而且只能有1个

          根据用户名,返回该用户对应的密码

     1 set global log_bin_trust_function_creators=TRUE;
     2 delimiter $$
     3 create function test2(username varchar(20)) returns varchar(20)
     4 begin
     5     set @password = '';
     6     select users.`PassWord` into @password from users where users.UserName = username;
     7     return @password;
     8 end$$
     9 
    10 select test2('fanqi');
  • 相关阅读:
    高级特性(4)- 数据库编程
    UVA Jin Ge Jin Qu hao 12563
    UVA 116 Unidirectional TSP
    HDU 2224 The shortest path
    poj 2677 Tour
    【算法学习】双调欧几里得旅行商问题(动态规划)
    南洋理工大学 ACM 在线评测系统 矩形嵌套
    UVA The Tower of Babylon
    uva A Spy in the Metro(洛谷 P2583 地铁间谍)
    洛谷 P1095 守望者的逃离
  • 原文地址:https://www.cnblogs.com/fanqisoft/p/10700995.html
Copyright © 2011-2022 走看看