1. 程式人生 > 資料庫 >淺談MySql 檢視、觸發器以及儲存過程

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

檢視

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

檢視(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 檢視、觸發器以及儲存過程的資料請關注我們其它相關文章!