天天看點

資料庫(視圖、觸發器、存儲過程)

視圖

視圖的概念

  視圖是一個虛拟表,是從資料庫中一個或者多個表中導出來的表,視圖還可以從已存在的的視圖的基礎上定義

  視圖在MySQL中擁有和實體表一緻的地位,是以在使用上就和正常的資料表一緻

 

視圖的使用

建立視圖

  create view view_name as select…

  view_name 視圖名稱 select…語句是你所要在 這個視圖中展示的字段

檢視視圖

  show tables; 該操作與表一緻

删除視圖

  drop view view_name;與表操作一緻

更新視圖

  更新視圖指的是更新視圖中資料的字段值

  insert into插入一個資料

  update 更新一個資料

  delete 删除一個資料

create view myview as # 建立視圖
#将c_name字段在視圖中展示為商品名稱字段
select c_name as 商品名稱,c_inprice as 商品進價,ct_id as 商品類型
#ct_id為commoditytype表的字段 這邊使用内連接配接  
from commodity,commoditytype where ct_id=c_type;
 
#插入一條資料,雖然插入的是在視圖中,但是在實體表中真實插入了資料
insert into  myview values(...)
注意:視圖的插入操作隻能是針對單表的完全映射才能插入資料
 
#修改一條視圖資料
update myview set 商品進價=100 where 商品名稱='手辦';
注意:視圖的修改會直接影響實體表的資料
 
#删除一條視圖資料  删除商品名稱為手辦的商品資料
delete from view where 商品名稱='手辦';
注意:視圖的删除會直接删除實體表的資料
           

視圖的優點

  使用視圖可以使得資料更加的安全

  對資訊進行保護,和對複雜的SQL語句進行封裝

觸發器

觸發器的概念

  即當發生某一事件時,如果滿足給定條件,則執行相應的捆綁事件

 

觸發器的使用

create trigger 觸發器名稱

after|before insert on tableName(表名)   # after和before是指 在tableName插入資料(之前|之後)觸發綁定的事件

for each row  #監視每一行的資料

begin    #代表綁定事件的開始

 綁定的觸發事件

end;    #代表綁定事件的開始

 

觸發器的new 和 old

 insert語句中 隻有 new 可用

 delete語句中 隻有 old 可用

 update 語句中 new old 都可以使用

#修改SQL語句結束的預設結束符為$,因為綁定事件的結束符為;不修改則不能完成觸發器的編寫
delimiter $
create trigger mytri  #建立mytri插入觸發器
after insert on `order`  #在order表被插入資料時 執行綁定事件
for each row
begin
#綁定的事件為 更新commodity表中c_num的值
update commodity set c_num = c_num-new.o_num where c_id=new.o_cid;
###此處的new可以引用insert的order表中的所有字段
end$
delimiter ;  #寫完觸發器别忘記把預設的結束符改回來
 
建立删除觸發器
delimiter $
create trigger mytri2
after delete on `order`   #監視order表,若出現删除操作,則觸發綁定的事件
for each row
begin
update commodity set c_num=c_num+old.o_num where c_id=old.o_cid;
##此處的old為 delete時 可以引用order表的所有字段
end$
delimiter ;
 
建立修改觸發器
delimeter $
create trigger mytri3
after update on `order`  #監視order表,當order出現update操作時,觸發事件生效
for each row
begin
##更新commodity中c_num的值
update commodity set c_num=c_num+old.o_num-new.o_num where c_id=new.o_cid;
end$
delimiter ;
           

觸發器的作用

   存儲SQL語句,可以減少代碼的複寫量

存儲過程

存儲過程的概念

  将一系列的SQL語句操作封裝起來,使用時友善調用,類似于方法的調用

 

存儲過程的使用

建立存儲過程

create procedure 名稱(參數清單)

begin

sql語句…(方法體)

end;

 參數有傳入參數和傳回參數,分别用 in和out修飾,當然參數清單也可以為空

删除存儲過程

drop procedure 名稱

 

調用存儲過程

call 存儲過程名稱

傳出參數的存儲過程建立
delimiter $  #修改預設結束符
create procedure mypro(in cnum int(11))  #in表示該參數是傳入的,int(11) 是該參數的類型
begin
select c_name from commodity where c_num=cnum;  
#篩選出c_num等于cnum的資料的c_name
end$
delimiter ;
call mypro(100);  #調用存儲過程  這邊參數給了100,就是篩選出c_num=100的資料
 
傳出參數的存儲過程建立
delimiter $  #修改預設結束符
create procedure mypro1(out cid int(11))
begin
select c_id into cid from commodity where c_num=10;
 #篩選出c_num為10的資料的id,并指派給傳出參數 cid   (這裡使用into進行指派操作)
end;
delimiter ;  #将預設結束符修改回;
call mypro1(); #調用mypro1存儲過程,由于沒有傳入參數,,是以不需要參數
  
 
删除存儲過程
drop procedure mypro1;
           

存儲過程的作用

1.存儲過程的SQL語句是已經編譯過得,執行效率更高

2.存儲過程可以有傳入參數和傳出參數(傳回值) 可以直覺的知道SQL語句有沒有運作成功

3.存儲過程比較穩定,不會有太大的錯誤