国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

sql中的觸發器、視圖、事務

2024-07-21 02:48:35
字體:
來源:轉載
供稿:網友
sql中的觸發器、視圖、事務

·觸發器(trigger)

【觸發器本質上還是一個存儲過程,只不過不是用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·選擇要添加的列名

【代碼創建視圖】:

格式為:

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通榆县| 贵阳市| 深水埗区| 普陀区| 岳池县| 双柏县| 商河县| 乃东县| 仙桃市| 乌兰察布市| 金堂县| 承德市| 江陵县| 本溪| 正安县| 革吉县| 会泽县| 东城区| 鄂托克前旗| 德安县| 南昌县| 岳西县| 汪清县| 威远县| 巴林左旗| 吉林省| 册亨县| 太谷县| 洱源县| 长宁区| 贵港市| 墨竹工卡县| 都江堰市| 通榆县| 兴业县| 江油市| 星子县| 旬阳县| 大庆市| 黔江区| 盐城市|