之前在網上看到歪國人專門寫了本mysql存儲過程,感受很強大啊。mysql
MySQL stored programs包括存儲過程,函數,觸發器。程序員
主要有三種類型的數據庫存儲程序sql
存儲過程
存儲過程是最多見的存儲程序,存儲過程是可以接受數個輸入和輸出參數而且可以在請求時被執行的程序單元。
存儲函數
存儲函數和存儲過程很相像,可是它的執行結果會返回一個值。最重要的是存儲函數能夠被用來充當標準的SQL語句,容許程序員有效的擴展SQL語言的能力
觸發器
觸發器是用來響應激活或者數據庫行爲,事件的存儲程序,一般,觸發器用來做爲DML(數據庫操縱語言)的響應而被調用,觸發器能夠被用來做爲數據校驗和自動反向格式化。數據庫
先來看一下官方的定義。
Stored procedures 存儲過程
Stored procedures are the most common type of stored program. A stored proce-
dure is a generic program unit that is executed on request and that can accept
multiple input and output parameters.
Stored functions 函數
Stored functions are similar to stored procedures, but their execution results in
the return of a single value. Most importantly, a stored function can be used
within a standard SQL statement, allowing the programmer to effectively extend
the capabilities of the SQL language.
Triggers觸發器。
Triggers are stored programs that are activated in response to, or are triggered
by, an activity within the database. Typically, a trigger will be invoked in
response to a DML operation (INSERT, UPDATE, DELETE) against a database table.
Triggers can be used for data validation or for the automation of denormalization.編程
大概說一下。安全
存儲過程:存儲過程可使得對數據庫的管理、以及顯示關於數據庫及其用戶信息的工做容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並做爲一個單元處理。存儲過程存儲在數據庫內,可由應用程序經過一個調用執行,並且容許用戶聲明變量、有條件執行以及其它強大的編程功能。存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們能夠接受參數、輸出參數、返回單個或多個結果集以及返回值。存儲過程存儲在數據庫內,可由應用程序經過一個調用執行,並且容許用戶聲明變量、有條件執行以及其它強大的編程功能。存儲過程可包含程序流、邏輯以及對數據庫的查詢。它們能夠接受參數、輸出參數、返回單個或多個結果集以及返回值。 能夠出於任何使用 SQL 語句的目的來使用存儲過程,它具備如下優勢: 能夠在單個存儲過程當中。函數
自定義函數:存儲過程可使得對數據庫的管理、以及顯示關於數據庫及其用戶信息的工做容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並做爲一個單元處理。存儲過程和函數的區別:
性能
1. 通常來講,存儲過程實現的功能要複雜一點,而函數的實現的功能針對性比較強。
2. 對於存儲過程來講能夠返回參數,而函數只能返回值或者表對象。
3. 存儲過程通常是做爲一個獨立的部分來執行,而函數能夠做爲查詢語句的一個部分來調用,因爲函數能夠返回一個表對象。spa
存儲過程就是程序,它是通過語法檢查和編譯的SQL語句,因此運行特別快。(這就是爲啥用存儲過程的緣由)orm
觸發器:觸發器是特殊的存儲過程,存儲過程須要程序調用,而觸發器會自動執行;出於性能和數據安全的緣由,項目中基本沒有用過觸發器。
mysql查看庫中全部的存儲過程,函數,觸發器:
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'
也可 「show procedure status; //存儲過程」
select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION' //函數
也可 show function status; //函數
存儲過程,對INFORMATION_SCHEMA數據庫中的TRIGGERS表查詢
mysql>SELECT * FROM triggers T WHERE trigger_name=」mytrigger」 \G
SHOW TRIGGERS [FROM db_name] [LIKE expr]
SHOW TRIGGERS\G //觸發器