数据库中触发器、事务
觸發(fā)器
步驟:打開選用的‘?dāng)?shù)據(jù)庫’,然后打開‘可編程性’,就可以找到‘?dāng)?shù)據(jù)庫觸發(fā)器’。
是一種存儲過程,只是不通過? exec 調(diào)用執(zhí)行!
通過增刪改語句來引發(fā)執(zhí)行!
在有主外鍵關(guān)聯(lián)時,可以把關(guān)聯(lián)的信息都修改
(有主外鍵關(guān)聯(lián)時,要先刪除外鍵才可以刪主鍵)
create table new
(code int ,
shu? int)
go
insert into new values (1,1)
insert into new values (2,3)
insert into new values (3,4)
insert into new values (4,5)
insert into new values (5,6)
select *from new
drop table new
----------------------------------------------------
create trigger TR_new_Delete? --創(chuàng)建并命名觸發(fā)器
on new --作用于new 表
for delete--delete/insert/update?? --先執(zhí)行刪除語句,再進行插入語句
as
? insert into new values (11,11)--占據(jù)刪除數(shù)據(jù)的位置
?? insert into new values (3,4)--在新插入數(shù)據(jù)的位置
go –到此,觸發(fā)器完成。
?
?delete from new where code=3
--引發(fā)觸發(fā)器語句,只能是增刪改
?select *from new
for/after? 先運行go再運行as
?--先go刪除了code=3,再as添加了code=11,code=3
-- drop trigger TR_new_Delete
?--------------------------------------------------
create trigger TR_new_Delete
on new
instead of delete?
as
? insert into new values (11,11)
go
??delete from new where code=2
select * from new?
--此時不執(zhí)行刪除語句,只執(zhí)行插入語句!
instead of只運行as的語句
?
?
----------------------------------------------
alter? trigger dongtaichufa
on teacher
instead of delete
as
? begin
??? declare @Tno varchar(20)
set @Tno=(select Tno from deleted)
--deleted 表示虛擬表(go后面的delete 語句)
??? update teacher set Tname='遞歸'where Tno=@Tno
? end
go
? delete? from teacher where Tno='856'
select *from teacher
---------------------------------------------
--觸發(fā)器可以處理視圖,(用途:1.刪除數(shù)據(jù)時備份2.操作視圖,即有主外鍵關(guān)聯(lián)時)
create? trigger inserttt
on teacher
for? insert
as
?declare @Tno varchar(19)
?set @Tno=(select Tno from inserted)
?update teacher set Tsex='男'where Tno=@Tno? --修改表內(nèi)容
go
insert into teacher values
('789','集合','女','1990-09-09','教授','生物系')
select *from teacher
----------------------------------------------
alter table teacher disable trigger all--(或觸發(fā)器名字)禁用全部
alter table teacher enable? trigger all--(或觸發(fā)器名字)啟用全部
?
#########################
?
事物:
就是把語句‘打包’執(zhí)行,只要發(fā)生錯誤,全部執(zhí)行失敗!
begin tran???? --開始‘事務(wù)’
--一般對增刪改使用‘事物’!查詢一般不用’事物’
insert into student values ('910','王五','男','1999-09-09','95033')
if @@ERROR >0--一旦發(fā)生錯誤,執(zhí)行下面的返回!
goto TranRollback
insert into course values ('3-999','語文','804')
if @@ERROR >0
goto TranRollback
insert into? score? values ('191','3-105',99)
?
?if @@ERROR >0
? begin
?? TranRollback:? rollback tran --返回tran 開始!
? end
?else
? begin
?? commit tran--確認(rèn)提交tran 執(zhí)行語句內(nèi)容!
? end
?
轉(zhuǎn)載于:https://www.cnblogs.com/huaze/p/4089873.html
總結(jié)
以上是生活随笔為你收集整理的数据库中触发器、事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安全类链接,https
- 下一篇: 杂谈--SQL SERVER版本