MariaDB數據庫函數、存儲過程和觸發器
-----------------------------------------------------------------------------------------------------------------------------------------------
<1>系統函數:系統自帶的函數,可以實現查詢語句中的某些要求,比如select avg(Age) from students;,這裏avg()就是系統函數
CREATE FUNCTION function_name(
PARAMETER_NAME type,[PARAMETER_NAME type]...)
RETURNS {STRING|INTERGER|REAL}
注意:參數PARAMETER_NAME type可以有多個,也可以沒有參數;必須有且只有一個返回值,返回的是{字符串|整數|實數}
SHOW CREATE FUNCTION function_name
SELECT function_name(parameter_value,...)
<1>SET parameter_name= value[,parameter_name= value...]
<2>SELECT INTO parameter_name,比如說
SELECT COUNT(id) FROM tdb_nameINTO x;
注意:函數調用只能在SQL語句中被select調用,不能單獨使用
CREATE PROCEDURE sp_name([ proc_parameter[,proc_parameter ...]])
其中:proc_parameter: [IN|OUT|INOUT] parameter_nametype
其中IN表示輸入參數,OUT表示輸出參數,INOUT表示既可以輸入也可以輸出;param_name表示參數名稱;type表示參數的類型
CALL sp_name([ proc_parameter[,proc_parameter...]])
說明:當無參時,可以省略"()",當有參數時,不可省略"()”
ALTER語句修改存儲過程只能修改存儲過程的註釋等無關緊要的東西,不能修改存儲過程體,所以要修改存儲過程,方法就是刪除重建
<1>存儲過程把經常使用的SQL語句或業務邏輯封裝起來,預編譯保存在數據庫中,當需要時從數據庫中直接調用,省去了編譯的過程
<3>存儲過程一般獨立的來執行,而函數往往是作爲其他SQL語句的一部分來使用
CASE:用來進行條件判斷,可實現比IF語句更復雜的條件判斷
REPEAT:有條件控制的循環語句。當滿足特定條件時,就會跳出循環語句
REPEAT SET @sum = @sum+@i; SET @i= @i+ 1;
需要注意的是,無論函數還是自定義過程中,定義完參數之後,在編寫參數功能之前,中間有一個BEGIN表明開始,結尾也都有一個END
觸發器的執行不是由程序調用或者手動啓動的,而是由事件來觸發、激活從而實現執行
[DEFINER = { user | CURRENT_USER }]
trigger_time:{ BEFORE | AFTER },表示在事件之前或之後觸發
trigger_event::{ INSERT |UPDATE | DELETE },觸發的具體事件
查詢系統表information_schema.triggers的方式指定查詢條件,查看指定的觸發器信息。
mysql> USE information_schema;
mysql> SELECT * FROM triggers WHERE trigger_name='trigger_student_count_insert';