視圖
視圖的概念
視圖是一個虛拟表,是從資料庫中一個或者多個表中導出來的表,視圖還可以從已存在的的視圖的基礎上定義
視圖在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.存儲過程比較穩定,不會有太大的錯誤
…