数据库中触发器、事务
觸發器
步驟:打開選用的‘數據庫’,然后打開‘可編程性’,就可以找到‘數據庫觸發器’。
是一種存儲過程,只是不通過? exec 調用執行!
通過增刪改語句來引發執行!
在有主外鍵關聯時,可以把關聯的信息都修改
(有主外鍵關聯時,要先刪除外鍵才可以刪主鍵)
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? --創建并命名觸發器
on new --作用于new 表
for delete--delete/insert/update?? --先執行刪除語句,再進行插入語句
as
? insert into new values (11,11)--占據刪除數據的位置
?? insert into new values (3,4)--在新插入數據的位置
go –到此,觸發器完成。
?
?delete from new where code=3
--引發觸發器語句,只能是增刪改
?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?
--此時不執行刪除語句,只執行插入語句!
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
---------------------------------------------
--觸發器可以處理視圖,(用途:1.刪除數據時備份2.操作視圖,即有主外鍵關聯時)
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? --修改表內容
go
insert into teacher values
('789','集合','女','1990-09-09','教授','生物系')
select *from teacher
----------------------------------------------
alter table teacher disable trigger all--(或觸發器名字)禁用全部
alter table teacher enable? trigger all--(或觸發器名字)啟用全部
?
#########################
?
事物:
就是把語句‘打包’執行,只要發生錯誤,全部執行失敗!
begin tran???? --開始‘事務’
--一般對增刪改使用‘事物’!查詢一般不用’事物’
insert into student values ('910','王五','男','1999-09-09','95033')
if @@ERROR >0--一旦發生錯誤,執行下面的返回!
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--確認提交tran 執行語句內容!
? end
?
轉載于:https://www.cnblogs.com/huaze/p/4089873.html
總結
以上是生活随笔為你收集整理的数据库中触发器、事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安全类链接,https
- 下一篇: 杂谈--SQL SERVER版本