mysql視圖,觸發器,存儲過程優缺點及應用分析
視圖
mysql使用較少,是sql server和orcale使用多mysql
-
create view 視圖名 as 查詢語句sql
- create view user_view as select name,id from user;
- select * from user_view; //查詢視圖,查詢視圖的結果和視圖綁定的語句返回的數據相同
- 修改視圖數據 update user_view set username='two' where id=2;
- 視圖保存了sql邏輯,並無保存真實的數據,數據仍是從數據表獲取的
- drop view view_name
- 創建視圖時,最後增長with check option,在插入數據時,須要知足視圖條件才容許操做
-
優勢數據庫
- 簡化操做,能夠把複雜的sql進行封裝,使用起來簡單
- 下降耦合,只須要修改視圖,不須要修改代碼中的sql語句
-
安全,能夠隱藏某些字段安全
- create view a as select name,id,age from user;
- 操做a視圖時,只能獲得name,id,age字段 select name from a; 視圖中沒有select的字段也不能修改、排序、group by等,例如 select commit from a; 會報錯,沒有commit字段
- create view custom_view as select * from user group by id; 而後update custom_view set name=1 where id=1; 會報錯,custom_view不可更新
-
缺點sqlserver
觸發器
針對寫操做(insert,delete,update),去觸發事件,例如寫一張表的時候去更新另外一張表調試
-
create trigger 觸發器名 觸發時間(after、before) 觸發事件(insert,delete,update) on table for each row begin 方法體 end; for each row表示行級觸發code
- create trigger user_trigger after insert on
user
for each row begin insert test vales(1,2) end;
- drop trigger user_trigger;
- 一個事件只能增長一個觸發器
- show triggers 查看全部的觸發器建立信息
-
缺點server
- 優勢
存儲過程
對mysql並不友好,sqlserver和orcale支持更好,sqlserver指望全部業務都交由存儲過程來實現排序
- create procedure 存儲過程名(參數列表) begin 方法體 end
-- in表示輸入,out表示輸出,inout即表示輸入又表示輸出
create procedure user_procedure(in x int,out y varchar(25))
begin
-- into表明將結果存入到y
select username into y from user where id=x;
end
- call user_procedure(1,@a); 調用
- drop procedure procedure_name;
- select @a; 搜索輸出
-
優勢事件
- 執行塊,存儲過程會預編譯,第一次運行存儲過程會進行編譯,再次次奧用不會再通過sql解釋器
- 安全性高
-
缺點