mysql視圖,觸發器,存儲過程優缺點及應用分析

mysql視圖,觸發器,存儲過程優缺點及應用分析

視圖

mysql使用較少,是sql server和orcale使用多mysql

  1. 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,在插入數據時,須要知足視圖條件才容許操做
  2. 優勢數據庫

    • 簡化操做,能夠把複雜的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不可更新
  3. 缺點sqlserver

    • 數據庫發生改變,視圖須要手動修改
    • 不易於維護

觸發器

針對寫操做(insert,delete,update),去觸發事件,例如寫一張表的時候去更新另外一張表調試

  1. 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 查看全部的觸發器建立信息
  2. 缺點server

    • 批量操做不適用
    • 觸發器錯誤不易定位
  3. 優勢

存儲過程

對mysql並不友好,sqlserver和orcale支持更好,sqlserver指望全部業務都交由存儲過程來實現排序

  1. 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
  1. call user_procedure(1,@a); 調用
  2. drop procedure procedure_name;
  3. select @a; 搜索輸出
  4. 優勢事件

    • 執行塊,存儲過程會預編譯,第一次運行存儲過程會進行編譯,再次次奧用不會再通過sql解釋器
    • 安全性高
  5. 缺點

    • 不便維護
    • 移植性差,很差調試,也不易擴展
相關文章
相關標籤/搜索