淺談MySql 檢視、觸發器以及儲存過程
阿新 • • 發佈:2020-07-03
檢視
什麼是檢視?檢視的作用是什麼?
檢視(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(); //
以上就是淺談MySql 檢視、觸發器以及儲存過程的詳細內容,更多關於MySql 檢視、觸發器以及儲存過程的資料請關注我們其它相關文章!