【觸發器本質上還是一個存儲過程,只不過不是用exe來調用執行,而是通過增刪改數據庫的操作】
【觸發器只對增、刪、改有效】
觸發器的格式
(instead of與for的區別 如下)
instead of:
create trigger 觸發器名(TR_表名_操作)
on 表名
instead of 增或刪或改
--當為instead of時,go下的代碼不執行只起到觸發的作用,只執行as里面的代碼
as
as里面隨便寫代碼
go
go下的代碼只能是 增或刪或改
for:
create trigger 觸發器名(TR_表名_操作)
on 表名
for增或刪或改
--當為for時,go下的代碼先執行操作,再執行as里面的代碼
as
as里面隨便寫代碼
go
go下的代碼只能是 增或刪或改
寫觸發器時,go下面代碼中的增刪改和表名,與on后面的表名instead of或者for后面的增刪改差要一致,否則無法觸發
例子:(在觸發器中可以有參數)
Instead of實用:
create trigger dongtaichufa
on teacher
instead of delete
as
begin
declare @tno varchar(20)
set @tno=(select tno from deleted)--deleted的作用是儲存臨時數據(存儲的是tno為的一行數據),@tno=tno的含義是獲取教師工號
delete from teacher where tno=@tno--刪除這一條數據
end
go
delete from teacher where tno= '831'
for實用:
create trigger tr_dongtai
on teacher
for insert
as
begin
declare @tno varchar(20)--定義一個變量
set @tno=(select tno from inserted)--inserted的作用是臨時存儲數據,(存儲要插入的一行數據),@tno的含義是獲取要插入的教師的編號
delete from teacher where tno=@tno --刪除剛剛插入的一行數據
end
go
insert into teacher values('810','王五','男','1991-1-1','講師','電子工程系')
視圖(view)1、視圖窗口創建視圖步驟:1·數據庫名-->右鍵視圖(新建視圖)-->2·添加要連接的表-->3·選擇要添加的列名
1·
2·
3·
【代碼創建視圖】:
格式為:
create view 視圖名
as
select 表名.列名,表名.列名,表名.列名,表名.列名 from 表名 join 表名 on 表名.列名=表名.列名
--------------例如:
沒用視圖如下
用代碼創建視圖為:
create view shitu
as
select student.sno,sname,ssex,sbirthday,class,course.cno,cname,degree,tno from
student join score on student.sno=score.sno join course on score.cno=course.cno
Begin tran----開始事務
Commit---提交
Rollback---回滾事務
---事務(在begin tran里面有多個代碼,如果有一個發生錯誤,則全部停止,并返回begin tran開始處)
實例:
begin tran--事務的開始
insert into student values('110','hh','aa','1987/1/12',5788) —插入第一個數據為主鍵,110沒有重復的,正確
if @@ERROR >0 --全局變量,判斷上一句中是否有錯,返回0沒有錯,不等于0則發生錯誤
goto tr --如果發生錯誤,則跳轉到名字為tr的一行(goto后面的只是個名字而已)
insert into course values('3-105','計算機',825) --第一個3-105則為外鍵,發生錯誤,表中有3-105
if @@ERROR >0
begin
tr: --接上面的tr
rollback tran --回滾到tran開始處
end
else --如果沒有錯誤的話
begin
commit tran --提交事務,接著往下運行
end
新聞熱點
疑難解答