利用觸發器實現日誌記錄

2021-04-09 00:42:48 字數 2585 閱讀 2720

我們在做專案的過程中,很多時候都要涉及到 日誌。

日誌無非就是記錄使用者對資料的一些修改,新增,刪除操作。所以,我們很容易聯想到用觸發器來實現。

假如現在日誌需要記錄當使用者對userinfo表進行的update,insert,delete操作時的表名,時間,以及操作的表的關鍵字值,修改者。userinfo表結構如下:

使用者資訊表

(userinfo)

field

type

keyfk

uninull

defnote

1username

varchar(20)**

員工姓名

2userpassword

varchar(16)

員工密碼

3user***

char(2)

員工性別

日誌表結構如下:

field

type

keyfk

uninull

defnote

1log_id

int*

日誌記錄序號

(標識,自增)2

mdf_table_name

varchar(30)

修改記錄所在的表名

3operate_type

char(1)

是建立記錄還是修改記錄(0新建,1修改,2刪除)

4mdf_time

datetime

修改時間

5record_key

varchar(20)

修改記錄的關鍵字段值

6mender_name

varchar(20)

修改者姓名

還有乙個currentuser 表,存放當前操作的使用者。

當使用者新增乙個使用者時,我們可以建立如下觸發器記錄:

create trigger log_userinfo_insert

on userinfo

for insert

asbegin

declare @username varchar(20),@newuser varchar(20)

select @username=username from currentuser

select @newuser=username from inserted

insert into loginfo(mdf_table_name,operate_type,mdf_time,mender_name,record_kye)

values('userinfo',0,getdate(),@username, @newuser)

end當使用者刪除乙個使用者時,我們也可以記錄:

create trigger log_userinfo_del

on userinfo

for delete

asbegin

declare @username varchar(20),@deluser varchar(20)

select @username=username from currentuser

select @deluser=username from deleted

insert into loginfo(mdf_table_name,operate_type,mdf_time,mender_name,record_kye)

values('userinfo',1,getdate(),@username, @deluser)

end假如當使用者修改了乙個使用者的使用者名稱過後,我們需要記錄修改前的使用者名稱,我們可以這樣記錄:

create trigger log_userinfo_update

on userinfo

for update

asbegin

declare @username varchar(20),@updateuser varchar(20)

select @username=username from currentuser

select @updateuser=username from deleted

insert into loginfo(mdf_table_name,operate_type,mdf_time,mender_name,record_kye1)

values('userinfo',2,getdate(),@username, @updateuser)

end寫到這裡,不得不談一下觸發器中的魔術表。每個觸發器都有兩個特殊的表:插入表(inserted)和刪除表(deleted)。他們也叫魔術表。這兩個是邏輯表,又系統管理,儲存在記憶體中,不是儲存在資料庫中,表結構和使用者操作的表的結構一樣。使用者不能修改,但可以去讀,當觸發器完成他們也被刪除。這兩個表主要儲存因使用者操作而被影響到的原始資料或新資料。所以當定義insert觸發器的時候,就會有乙個inserted表記錄使用者插入的內容,當定義delete觸發器的時候就會有乙個deleted表。不同的是,更新操作,也就是update觸發器包括兩個部分,既先將更新的內容刪除,然後在將新值插入,所以在update觸發器中,inserted和deleted表會同時產生,乙個儲存更新後的資料,乙個儲存更新前的資料。也正是觸發器的這兩個魔術表讓我們用觸發器來實現日誌的記錄具有魔術般的效果。

kettle利用觸發器實現資料同步

2016年8月17日 一 目的 通過觸發器實現資料同步 二 思路 1.在資料庫需要同步的源表中建立乙個insert觸發器,當有新資料插入時,會自動將新插入資料的主鍵記錄到臨時表temp中。當然也可以記錄多個字段 2.比較臨時表temp和源表中的資料,匹配兩個表中的主鍵值是否一致 也可以匹配多個字段 ...

利用觸發器生成編號

原貼 http munity.csdn.expert topic 4294 4294910.xml?temp 3575403 有一表 id,product id,product name 其中id是自動編號,當向這錶新增資料時候,product id自動新增資料,格式是 wpbh max id 1,...

mysql觸發器學習日誌

觸發器和儲存過程,函式的寫法很像,但是不同的是觸發器並不需要手動呼叫,而是在設定條件後由系統自動呼叫,下面我們做乙個關於users表的增刪改觸發器。1.先建立乙個users表和儲存觸發器工作日誌的rizhi表 2.然後分別建立三個觸發器 增刪改 delimiter drop trigger t1 c...