• mysql数据库--自定义函数和存储过程(以及PHP对其的调用)


    为什么使用自定义函数?

    1.系统内置函数只能提供简单的、对数据库表字段的操作。

    2.自定函数可以提高数据库中代码的可重用性,可以实现复杂功能,可以根据需要来获取返回值。

    为什么使用存储过程?

    1.存储过程是SQL语句和控制语句的预编译集合,以一个名称存储,并可以作为一个单位来处理。

    2.procedure可实现复杂的操作,曾强SQL的功能具有很大的灵活性,可由Application调用执行,可以进行流程控制,可以接收和返回多个参数。

    3.实现很大程度加快执行的速度

    4.可以减少网络流量

    mysql自定义函数:

      UDF(用户自定义函数):

        是对mysql扩展的一种途径。

      说明:

        自定义函数只能有一个返回值,复合结构的函数体需要用BEGIN和END来包含。

      语法:

        CREATE FUNCTION  f_name[(parameters..)]

        RETURNS parameter_type

        BEGIN

        SQL STATEMENT

        ...

        RETURN values

        END  

      函数的调用:

        SELECT f_name(parameters..);

      函数应用举例:

        CREATE FUNCTION addUser     //此函数实现向fx_user表插入一条记录,并返回插入的字段ID.

        (u_name VARCHAR(20),u_p VARCHAR(20),u_c INT UNSIGNED)

        RETRUNS INT UNSIGNED

        BEGIN

        INSERT INTO fx_test (name,password,companyId) VALUES (u_name,u_p,u_c);
        RETURN LAST_INSERT_ID();

        END

      mysql客户端查看FUNCTION:

        

      mysql客户端调用此FUNCTION:

        SELECT addUser('admin','adminpassword',2);

      php调用函数:

        

      在浏览器端,运行执行后(数据插入成功):

        

      

    mysql存储过程:

      正常的SQL语句的执行过程是:

        sql命令--》mysql引擎--》判断语法是否正确?--》(编译)生成mysql引擎可识别的命令--》生成执行结果--》结果返回客户端。

      存储过程的执行过程是:

        sql命令--》mysql引擎--》生成执行结果--》结果返回客户端。

      优势:

        其省略了语法分析和系统编译的过程,那么SQL的命令执行将会快速很多,大大提高了执行效率。

      定义:

        PROCEDURE 是SQL语句和控制语句的预编译集合,以一个名称存储并作为一个单元处理。

      语法:

        CREATE PROCEDURE procedure_name

        [(

         [IN|OUT] parameters... //形式参数,

        )]

        [charactristic..]  PROCEDURE_BODY

        说明:1.PROCEDURE的参数类型:[IN|OUT]

             2.delimiter用来修改mysql的定界符

      

      存储过程的调用:

        CALL procedure_name;

      存储过程应用举例:(此存储过程实现,删除用户,返回被删除用户的id,并且返回剩余用户的数量)

        DELIMITER //

        CREATE PROCEDURE deleteTestANDreturn

        (IN p_id INT UNSIGNED,OUT r_id INT UNSIGNED,OUT NUMS INT)

        BEGIN
        DELETE FROM fx_test WHERE id=p_id;
        SELECT id FROM fx_test WHERE id=p_id INTO r_id;
        SELECT COUNT(id) FROM fx_test INTO NUMS;
        END

      mysql客户端查看PROCEDURE:

        SHOW PROCEDURE status G; //显示所有存储过程并且以网格的形式显示

        

      mysql客户端调用此PROCEDURE:

        CALL deleteTestANDreturn(1,@id,@nums);

        SELECT @id,@nums; //显示删除的id , 剩余的总数;

      php调用存储过程:

        

      在浏览器端,运行执行后(数据删除成功):

        

  • 相关阅读:
    数据结构与算法(0)--必知必会
    数据结构概览
    Python 数据分析学习路线
    数据分析交互工具--使用jupyter
    Vue项目搭建
    luffy_08
    luffy_07
    luffy_06
    luffy_05
    luffy_04
  • 原文地址:https://www.cnblogs.com/ahguSH/p/6024894.html
Copyright © 2020-2023  润新知