MariaDB數據庫函數、存儲過程和觸發器

                             MariaDB數據庫函數、存儲過程和觸發器

-----------------------------------------------------------------------------------------------------------------------------------------------

1、函數

(1)系統函數和自定義函數

<1>系統函數:系統自帶的函數,可以實現查詢語句中的某些要求,比如select avg(Age) from students;,這裏avg()就是系統函數

<2>自定義函數:保存在mysql.proc中

創建自定義函數

CREATE FUNCTION function_name(

PARAMETER_NAME type,[PARAMETER_NAME type]...)

RETURNS {STRING|INTERGER|REAL}

runtime_body

注意:參數PARAMETER_NAME type可以有多個,也可以沒有參數;必須有且只有一個返回值,返回的是{字符串|整數|實數}

(2)相關SQL語句

查看函數列表:

SHOW FUNCTION STATUS;

查看函數定義

SHOW CREATE FUNCTION function_name

刪除UDF:

DROP FUNCTION function_name

調用自定義函數語法:

SELECT function_name(parameter_value,...)

(3)自定義函數示例

image.png

(4)爲變量賦值

<1>SET parameter_name= value[,parameter_name= value...]

<2>SELECT INTO parameter_name,比如說

DECLARE x int;

SELECT COUNT(id) FROM tdb_nameINTO x;

RETURN x;

注意:函數調用只能在SQL語句中被select調用,不能單獨使用

2、存儲過程

存儲過程保存在mysql.proc中

(1)創建語句

    CREATE PROCEDURE sp_name([ proc_parameter[,proc_parameter ...]])

    routime_body

    其中:proc_parameter: [IN|OUT|INOUT] parameter_nametype

    其中IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;param_name表示參數名稱;type表示參數的類型

(2)相關SQL語句

查看存儲過程列表

SHOW PROCEDURE STATUS

查看存儲過程定義

SHOW CREATE PROCEDURE sp_name

調用存儲過程:

CALL sp_name([ proc_parameter[,proc_parameter...]])

CALL sp_name

說明:當無參時,可以省略"()",當有參數時,不可省略"()”

存儲過程修改:

ALTER語句修改存儲過程只能修改存儲過程的註釋等無關緊要的東西,不能修改存儲過程體,所以要修改存儲過程,方法就是刪除重建

刪除存儲過程:

DROP PROCEDURE sp_name

(3)存儲過程示例

無參數存儲過程

image.png

有參數存儲過程

image.png

有參數存儲過程包含IN和OUY

image.png

(4)存儲過程優勢:

<1>存儲過程把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在數據庫中,當需要時從數據庫中直接調用,省去了編譯的過程

<2>提高了運行速度

<3>同時降低網絡數據傳輸量

(5)存儲過程與自定義函數的區別:

<1>存儲過程實現的過程要複雜一些,而函數的針對性較強

<2>存儲過程可以有多個返回值,而自定義函數只有一個返回值

<3>存儲過程一般獨立的來執行,而函數往往是作爲其他SQL語句的一部分來使用

注意:用call調用存儲過程

(6)流程控制:

存儲過程和函數中可以使用流程控制來控制語句的執行

IF:用來進行條件判斷。根據是否滿足條件,執行不同語句

CASE:用來進行條件判斷,可實現比IF語句更復雜的條件判斷

LOOP:重複執行特定的語句,實現一個簡單的循環

LEAVE:用於跳出循環控制

ITERATE:跳出本次循環,然後直接進入下一次循環

REPEAT:有條件控制的循環語句。當滿足特定條件時,就會跳出循環語句

WHILE:有條件控制的循環語句

附:1+2+...+100=?中間代碼

SET @i= 0;

SET @sum = 0;

REPEAT SET @sum = @sum+@i; SET @i= @i+ 1;

UNTIL @i> n END REPEAT;

需要注意的是,無論函數還是自定義過程中,定義完參數之後,在編寫參數功能之前,中間有一個BEGIN表明開始,結尾也都有一個END

3、觸發器

觸發器的執行不是由程序調用或者手動啓動的,而是由事件來觸發、激活從而實現執行

(1)創建語句

CREATE

[DEFINER = { user | CURRENT_USER }]

TRIGGER trigger_name

trigger_time trigger_event

ON tbl_name FOR EACH ROW

trigger_body

說明:

    trigger_name:觸發器的名稱

    trigger_time:{ BEFORE | AFTER },表示在事件之前或之後觸發

    trigger_event::{ INSERT |UPDATE | DELETE },觸發的具體事件

    tbl_name:該觸發器作用在表名

(2)觸發器示例

image.png

(3)相關SQL語句

<1>查看觸發器

SHOW TRIGGERS

查詢系統表information_schema.triggers的方式指定查詢條件,查看指定的觸發器信息。

進入數據庫後:

mysql> USE information_schema;

Database changed

mysql> SELECT * FROM triggers WHERE trigger_name='trigger_student_count_insert';

<2>刪除觸發器

DROP TRIGGER trigger_name;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章