我們在做專案的過程中,很多時候都要涉及到 日誌。
日誌無非就是記錄使用者對資料的一些修改,新增,刪除操作。所以,我們很容易聯想到用觸發器來實現。
假如現在日誌需要記錄當使用者對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...