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調用存儲過程:

    

  在瀏覽器端,運行執行后(數據刪除成功):

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM