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调用存储过程:

    

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

    

原文地址:https://www.cnblogs.com/ahguSH/p/6024894.html