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

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

-----------------------------------------------------------------------------------------------------------------------------------------------
sql

一、函數數據庫

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

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

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

建立自定義函數spa

CREATE FUNCTION function_name(orm

PARAMETER_NAME type,[PARAMETER_NAME type]...)blog

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調用,不能單獨使用

二、存儲過程

存儲過程保存在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

三、觸發器

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

(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;

相關文章
相關標籤/搜索