1. 程式人生 > >MySQL(四)檢視,儲存過程,觸發器

MySQL(四)檢視,儲存過程,觸發器

一:檢視

什麼是檢視?

檢視(View)是一種虛擬存在的表,對於使用檢視的使用者來說基本上是透明的。檢視並
不在資料庫中實際存在,行和列資料來自定義檢視的查詢中使用的表,並且是在使用檢視時
動態生成的

檢視的優點?

  1. 簡單:使用檢視的使用者完全不需要關心後面對應的表的結構、關聯條件和篩選條件, 對使用者來說已經是過濾好的複合條件的結果集,可以遮蔽複雜的業務邏輯,只用關心結果
  2. 安全:使用檢視的使用者只能訪問他們被允許查詢的結果集,對錶的許可權管理並不能
    限制到某個行某個列,但是通過檢視就可以簡單的實現。
  3. 資料獨立:一旦檢視的結構確定了,可以遮蔽表結構變化對使用者的影響,源表增加列對檢視沒有影響;源表修改列名,則可以通過修改檢視來解決,不會造成對訪問者的影響。

檢視的操作

  1. 建立檢視
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
  1. 修改檢視
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
  1. 刪除檢視,需要使用者具有刪除許可權
DROP VIEW [IF EXISTS] view_name
  1. 檢視檢視
SHOW TABLE STATUS  
  1. 檢視的定義
show create view 名稱

二: 儲存過程跟儲存函式

定義:

  1. 儲存過程和函式是事先經過編譯並存儲在資料庫中的一段 SQL 語句的集合
  2. 儲存過程和函式的區別在於函式必須有返回值,而儲存過程沒有,儲存過程的引數可以使用
    IN、OUT、INOUT 型別
    ,而函式的引數只能是 IN 型別的。如果有函式從其他型別的資料庫遷
    移到 MySQL,那麼就可能因此需要將函式改造成儲存過程

優點

  • 可以將資料的處理放在資料庫伺服器上進行,避免將大量的結果集傳輸給客戶端,減少資料的傳輸

缺點

  • 資料庫伺服器上進行大量的複雜運算也會佔用伺服器的 CPU,造成資料庫伺服器的壓力

儲存過程或者函式的操作

  1. 建立
CREATE PROCEDURE 儲存過程名稱 (引數]) 語句
CREATE FUNCTION 函式名稱 (引數]) RETURNS 返回值型別 語句
儲存過程引數:
[ IN | OUT | INOUT ] 引數名 引數型別
函式引數:
引數名 引數型別
  1. 呼叫
CALL 儲存過程名稱(引數1,引數2.....)
  1. 刪除儲存過程或者函式
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name
  1. 檢視儲存過程或者函式
SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']
  1. 檢視定義
SHOW CREATE {PROCEDURE | FUNCTION} 名稱

三:觸發器

  1. 建立觸發器
CREATE TRIGGER trigger_name trigger_time trigger_event
ON tbl_name FOR EACH ROW trigger_stmt
示例:(DELIMITER 將解為標誌符替換為$$)
DELIMITER $$
CREATE TRIGGER ins_film
AFTER INSERT ON film FOR EACH ROW BEGIN
INSERT INTO film_text (film_id, title, description)
VALUES (new.film_id, new.title, new.description);
END;
$$
delimiter ;
 trigger_time 是觸發器的觸發時間,可以是 BEFORE 或者 AFTER,BEFORE 的含義指在檢
查約束前觸發,而 AFTER 是在檢查約束後觸發。
而 trigger_event 就是觸發器的觸發事件,可以是 INSERT、UPDATE 或者 DELETE
mysql中對同一個表相同觸發時間的相同觸發事件,只能定義一個觸發器
  1. 刪除觸發器
DROP TRIGGER [資料庫.]trigger_name
不寫資料庫名稱,預設為當前資料庫
  1. 檢視觸發器
    可以通過執行 SHOW TRIGGERS 命令檢視觸發器的狀態、語法等資訊,但是因為不能查詢指
    定的觸發器,所以每次都返回所有的觸發器的資訊,使用起來不是很方便
show  triggers