1. 程式人生 > 資料庫 >mysql日誌觸發器實現程式碼

mysql日誌觸發器實現程式碼

sql語句

DROP TRIGGER
IF
EXISTS sys_menu_edit;
CREATE TRIGGER sys_menu_edit BEFORE UPDATE ON sys_menu FOR EACH ROW
BEGIN
INSERT INTO `g4m`.`sys_log` ( `table_name`,`val_id`,`data_json` )
VALUES
(
'sys_menu',old.id,CONCAT(
"{",CONCAT_WS(
',',CONCAT_WS( old.id,'"id":"','"' ),CONCAT_WS( old.CODE,'"code":"',CONCAT_WS( old.type_dic,'"type_dic":"',CONCAT_WS( old.NAME,'"name":"',CONCAT_WS( old.pid,'"pid":"',CONCAT_WS( old.status_dic,'"status_dic":"',CONCAT_WS( old.url,'"url":"',CONCAT_WS( old.path,'"path":"',CONCAT_WS( old.icon,'"icon":"',CONCAT_WS( old.sort,'"sort":"',CONCAT_WS( old.remark,'"remark":"',CONCAT_WS( old.create_time,'"create_time":"',CONCAT_WS( old.modify_uer_id,'"modify_uer_id":"',CONCAT_WS( old.modify_time,'"modify_time":"','"' )
),"}"
)
);

MySQL用觸發器實現日誌記錄

CREATE TRIGGER news_log AFTER INSERT ON news;

FOR EACH ROW INSERT INTO `news_logs` select *,now() from news where newsid = (select max(newsid ) from news);

DROP TRIGGER news_log ;

一共兩個表,一個是原始表 news,一個是日誌表news_logs(多了一列日期),可以實現新插入時自動記錄日誌,不用寫程式碼了。 類似還可以實現更新時插入更新日誌,詳情可檢視 MySQL 的文件。

mysql 用觸發器記錄操作補充

mysql 不能在一個觸發器中進行insert,update,delete操作,需分別建三個觸發器

insert觸發器:

delimiter $$
create trigger tri_city_insert
after insert 
on t_xfw_city 
for each row
begin
  insert into t_tri_city(id,name,provinceid,ctype) 
  values(new.id,new.name,new.provinceid,1);
end

update觸發器:

delimiter $$
create trigger tri_city_update
after update 
on t_xfw_city 
for each row
begin
  insert into t_tri_city(id,2);
end

delete觸發器:

delimiter $$
create trigger tri_city_delete
after delete 
on t_xfw_city 
for each row
begin
  insert into t_tri_city(id,ctype) 
  values(old.id,old.name,old.provinceid,3);
end

對一個表建三個觸發器有些麻煩,不知道還有沒有好點的方法