mysql2008觸發器 SQL2008觸發器

2021-10-19 02:27:31 字數 4162 閱讀 7570

首先來看一下觸發器的語法:

use [資料庫名]

goset ansi_nulls on

goset quoted_identifier on

go建立或修改(create|alter) trigger 觸發器名(最好以***x_tr命名規範結尾)

on表名

for 對於什麼操作觸發(insert,update,delete )

asbegin

觸發後要做的操作

end講到觸發器,當然少不了要提一下inserted和deleted表,

deleted 與inserted分別表示觸發事件的表「舊的一條記錄」和「新的一條記錄」。乙個資料庫系統中有兩個虛擬表用於儲存在表中記錄改動的資訊,分別是:

虛擬表inserted                     虛擬表deleted

在表記錄新增時       存放新增的記錄                         不儲存記錄

修改時              存放用來更新的新記錄                   存放更新前的記錄

刪除時              不儲存記錄                             存放被刪除的記錄

乙個insert 的過程可以看作為:生成的記錄到inserted表,

乙個delete的過程可以看作為:生成的記錄到deleted表,

乙個update 的過程可以看作為:生成新的記錄到inserted表,複製舊的記錄到deleted表

這兩個表在觸發器中很是重要,一定要理解和區分 他們的關係和作用!

這兩個表的結構和觸發器對應的表結構是相同的!

1 use [pd]

2 go

3 /****** object: trigger [dbo].[table_delete] script date: 06/10/2014 09:39:20 ******/

4 set ansi_nulls on

5 go

6 set quoted_identifier on

7 go

8 create trigger [dbo].[dayrunrecord20140528_delete]

9 on [dbo].[dayrunrecord20140528]

10 after delete

11 as

12 if @@rowcount = 0 --如果影響的行數為 0,則結束觸發器執行,避免占用資源

13 begin

14 return

15 end

16 else

17 begin

18 set nocount on;19 declare @operatedate datetime;20 declare @ipaddreass varchar(20);21 declare @hostname varchar(50);22 declare @loginame varchar(50);23 declare @content varchar(5000)24 declare @content_temp varchar(2000)25 declare @operatetable varchar(50);26 --獲取使用者新增內容(人員定位表的字段)

27 declare @id int;28 declare @minenumber int;29 declare @pepolenumber int;30 declare @routestation varchar(10);31 declare @routetime datetime;32 declare @dataflag int;33 declare @remark1 char(50);34 declare @worknumber varchar(50);35 declare @receivetime datetime;36 declare @enterflag int;37 declare @powerflag int;38 declare @devicedbid int;39 declare @tr_lastupdatetime datetime;40 declare @tr_guid uniqueidentifier;41 set @content = '';42 --宣告游標

43 declare mycursor cursor for

44 select * fromdeleted45 openmycursor46 fetch next from mycursor into @id,@minenumber,@pepolenumber,@routestation,@routetime,@dataflag,@remark1,@worknumber,@receivetime,@enterflag,@powerflag,@devicedbid,@tr_lastupdatetime,@tr_guid

47 while (@@fetch_status = 0)48 begin

49 set @content_temp = 'id='+convert(varchar,@id) +

50 ';minenumber='+convert(varchar,@minenumber)+

51 ';pepolenumber='+convert(varchar,@pepolenumber)+

52 ';routestation='+ @routestation +

53 ';routetime='+convert(varchar,@routetime)+

54 ';dataflag='+convert(varchar,@dataflag)+

55 ';remark1='+convert(varchar,@remark1) +

56 ';worknumber='+@worknumber+

57 ';receivetime'+convert(varchar,@receivetime)+

58 ';enterflag='+convert(varchar,@enterflag)+

59 ';powerflag='+convert(varchar,@powerflag)+

60 ';devicedbid='+convert(varchar,@devicedbid)+

61 ';tr_lastupdatetime='+convert(varchar,@tr_lastupdatetime)+

62 ';tr_guid='+convert(varchar(36),@tr_guid);63 if(@content<>'')64 begin

65 set @content = @content + '&' +@content_temp;66 end

67 else

68 begin

69 set @content = @content_temp;70 end

71 --將游標下移

72 fetch next from mycursor into @id,@minenumber,@pepolenumber,@routestation,@routetime,@dataflag,@remark1,@worknumber,@receivetime,@enterflag,@powerflag,@devicedbid,@tr_lastupdatetime,@tr_guid

73 end

74 --關閉游標

75 closemycursor76 --釋放游標

77 deallocatemycursor78 set @operatetable = 'dayrunrecord20140528';79 set @ipaddreass = convert(varchar,connectionproperty('client_net_address'));80 set @hostname = convert(varchar,host_name());81 set @operatedate = getdate();82 set @loginame = convert(varchar,(select system_user));83 --為日誌表新增資料

84 insert intoxjk_user_operatelog(operatetype,operatetable,operatecontent,operatedate,ipaddreass,hostname,username)85 values('刪除',@operatetable,@content,@operatedate,@ipaddreass,@hostname,@loginame);86 end

其實**雖然多,裡面實現的功能卻很簡單,就是遍歷deleted表中刪除的內容,並把這些內容拼接到乙個變數中,用於記錄成乙個日誌。

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...

my sql 觸發器 MySQL檢視觸發器

檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...