歡迎您光臨本站 註冊首頁

淺談MySql 視圖、觸發器以及存儲過程

←手機掃碼閱讀     zmcjlove @ 2020-06-21 , reply:0

視圖
 

什麼是視圖?視圖的作用是什麼?

視圖(view)是一種虛擬存在的表,是一個邏輯表,它本身是不包含數據的。作為一個select語句保存在數據字典中的。

通過視圖,可以展現基表(用來創建視圖的表叫做基表base table)的部分數據,說白了視圖的數據就是來自於基表。

視圖的優點:

  • 簡單:使用視圖的用戶完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對用戶來說已經是過濾好的複合條件的結果集。

  • 安全:使用視圖的用戶只能訪問他們被允許查詢的結果集,對錶的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單的實現。

  • 數據獨立:一旦視圖的結構確定了,可以屏蔽表結構變化對用戶的影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者的影響。

  • 不佔用空間:視圖是邏輯上的表,不佔用內存空間。

總而言之,使用視圖的大部分情況是為了保障數據安全性,提高查詢效率。

視圖的缺點:

  • 性能差:sql server 必須把視圖查詢轉化成對基本表的查詢,如果這個視圖是由一個複雜的多表查詢所定義,那麼,即使是視圖的一個簡單查詢,sql server 也要把它變成一個複雜的結合體,需要花費一定的時間。

  • 修改限制:當用戶試圖修改試圖的某些信息時,數據庫必須把它轉化為對基本表的某些信息的修改,對於簡單的試圖來說,這是很方便的,但是,對於比較複雜的試圖,可能是不可修改的。

視圖的創建以及修改

  --創建的基本語法是:  create view  as select 語句;  create view  (字段) as select 語句;  create or replace view ;    --修改的語法是:  alter view  as select 語句;    --視圖刪除語法:  drop view  ;

 

觸發器
 

什麼是觸發器?

觸發器就是監視某種情況,並觸發某種操作。

創建、刪除觸發器的語法:

  --創建觸發器的語法:  create trigger 觸發器名稱 after/before insert/update/delete on 表名   for each row  begin  sql語句;  end    --after/before:可以設置為事件發生前或後  --insert/update/delete:它們可以在執行insert、update或delete的過程中觸發  --for each row:每隔一行執行一次動作    --刪除觸發器的語法:  drop trigger 觸發器名稱;

 

演示

  --創建一個員工遲到表:  create table work_time_delay(  empno int not null comment '僱員編號',  ename varchar(50) comment '僱員姓名',  status int comment '狀態'  );    --delimiter // 自定義語句的結束符號    delimiter //    create trigger trig_work after insert on work_time_delay  for each row  begin   update employee set sal=sal-100 where empno=new.empno;  end  //    --new:指的是事件發生before或者after保存的新數據

 

存儲過程
 

什麼是存儲過程?

存儲過程就是把複雜的一系列操作,封裝成一個過程。類似於 shell,python 腳本等。

存儲過程的優點:

  • 複雜操作,調用簡單

  • 速度快

存儲過程的缺點:

  • 封裝複雜

  • 沒有靈活性

創建存儲過程語法

  --創建存儲過程語法:  create procedure 名稱 (參數....)  begin   過程體;   過程體;  end  --參數:  -- in|out|inout 參數名稱 類型(長度)  -- in:表示調用者向過程傳入值(傳入值可以是字面量或變量)  -- out:表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變量)  -- inout:既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量)    --聲明變量:declare 變量名 類型(長度) default 默認值;  --給變量賦值:set @變量名=值;  --調用存儲命令:call 名稱(@變量名);  --刪除存儲過程命令:drop procedure 名稱;  --查看創建的存儲過程命令:show create procedure 名稱G;

 

演示

  --創建一個簡單的存儲過程:  delimiter //  create procedure name(in n int)  begin   select * from employee limit n;  end  //    --調用存儲過程  set @n=5;  //    call name(@n);  create procedure name()  begin   declare n int default 6;   select * from employee limit n;  end  //    --調用存儲過程  call name();  //


   


[zmcjlove ] 淺談MySql 視圖、觸發器以及存儲過程已經有283次圍觀

http://coctec.com/docs/mysql/show-post-239340.html