sql觸發器(insert,update,delete…

--insert 觸發器
create trigger tri_insert
on student --將要進行更改的表名
for insert --給表插入一條數據的時候觸發
as
declare @student_id char(10) --定義一個變量
select @student_id=s.student_id from --把查詢出的指定字段的值賦值給變量
student s inner join inserted i
on s.student_id=i.student_id
if @student_id='0000000001'
begin
    raiserror('不能插入1的學號!',16,8)
    rollback tran
end
go

--update觸發器
create trigger tri_update
on student --將要進行更改的表名
for update --給表修改一條數據的時候觸發
as
if update(student_id)
begin
    raiserror('學號不能修改!',16,8)
    rollback tran
end
go


--delete觸發器
create trigger tri_delete
on student --將要進行更改的表名
for delete --給表刪除一條數據的時候觸發
as
declare @student_id varchar(10)
select @student_id=student_id from deleted
if @student_id='admin'
begin
    raiserror('錯誤',16,8)
    rollback tran
end

解釋在刪除(delete)數據的時候,可以假定數據庫將要刪除的數據放到一個deleted臨時表中,我們可以向讀取普通的表一樣,select 字段 from deleted
而insert的時候道理一樣,只不過是把要插入的數據放在inserted表中。
更新操作可以認爲是執行了兩個操作,先把那一行記錄delete掉,然後再insert,這樣update操作實際上就對deleted表和inserted表的操作,所以不會有updated表了,有的時候兩個表是主外鍵關係,想刪除主表數據的同時把子表相關的數據也刪除,這個時候如果用觸發器就沒有效果了,因爲這個觸發器是在你刪除表後才觸發的,這個時候直接終止,提示“有主外鍵關係,不能刪除等”,所有這樣的刪除觸發器是沒有效果的

sql觸發器(insert,update,delete)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章