視圖和觸發器


視圖
是由一個或多個表的數據拼接而成,是一個虛擬的表;
只能用來查詢顯示,不可以增刪改操作;
如果要增刪改操作,需要去對應的基礎表進行操作;
每一次查詢視圖,都會先去基礎表中調取數據,再拼接成視圖虛擬表;

注意!!視圖中,不允許出現重復的列,怎么解決:在from前,把所有的列都打出來,重復的列第一個就可以
ps:select student.sno,sname,ssex,sbirthday,class,score.cno,degree,cname,course.tno,tname,tsex,tbirthday,prof from student,score,course,teacher where student .sno=score.sno and course .cno=score.cno and teacher.tno=course.tno
創建格式
creat view 視圖名稱
as
select 列名 from 表名 --要執行的代碼

修改格式:
alter view
as
select 列名 from 表名 --修改后要執行的代碼

使用方式:
在用的數據庫-視圖-右鍵視圖名稱-設計-可以改別名

觸發器:
是一個特殊的存儲過程,沒有參數,沒有返回值;
通過對表的動作來觸發執行;

創建格式:
create trigger 觸發器名稱(命名規范:動作_表名稱)--動作:insert,delect,update
on 哪個表 --on 針對哪個表
for 哪個動作/ after 哪個動作--for是命令執行完畢之后再觸發,after與for意思一樣。
as
select *from 哪個表

create trigger 觸發器名稱(命名規范:動作_表名稱)
on 表名
instead of delect --instead of是替換命令
as
select *from deleted --deleted要刪除的信息

delect from 表名 --執行受到觸發器阻攔,執行select *from 哪個表,不會刪除

修改:
alter trigger 觸發器名稱(命名規范:動作_表名稱)
on 哪個表
for 哪個動作
as
update 表名 set 列名=''where 列名=''

級聯刪除:
create trigger 觸發器名稱(命名規范:動作_表名稱)
on 表名
instead of delect
as
declare @a varchar(max); --聲明變量
select @a =列名2 from deleted;--要刪除的信息賦值到變量里
delete from 表1 where 列名1=@a; --相關的列
delete from 表2 where 列名2=@a;

視圖:create view 表1_表2
as
select *from 表1,表2 where 列1=列2 (列1和列2 是主外鍵關系)
select *from 表1_表2
防止誤刪
create trigger delete_表名
on 表名
instead of delete
as
declare @a nvarchar(max);
select @a =列名 from deleted;
if @a='數據'
begin
print'內容' ;--在消息框中打印出來
end
else
begin
delete from 表名 where 列名=@a;
end

delete from 表名 where 列名='數據' --只要有不讓刪的數據,整個動作都是錯誤的,所有讓刪除的都不會刪除

注意:凡是修改都要create 改成alter ,再執行一遍

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM