2
我需要跟蹤MySql Db中某些表中的更改(審計跟蹤)。我正在嘗試執行解決方案here。MySQL db審計跟蹤觸發器
我有一個AuditLog表,包含以下列:AuditLogID,TableName,RowPK,FieldName,OldValue,NewValue,TimeStamp。
MySQL的存儲過程是以下(在此執行細,並創建過程):
如對過程的調用:CALL addLogTrigger( 'ProductTypes', 'ProductTypeID'); 執行,但不會創建任何觸發器(請參閱圖像)。 SHOW TRIGGERS返回空集。
請讓我知道可能是什麼問題,或實現這個問題的替代方法。
DROP PROCEDURE IF EXISTS addLogTrigger;
DELIMITER $
CREATE PROCEDURE addLogTrigger(IN tableName VARCHAR(255), IN pkField VARCHAR(255))
BEGIN
SELECT CONCAT(
'DELIMITER $\n', 'CREATE TRIGGER ', tableName, '_AU AFTER UPDATE ON ', tableName, ' FOR EACH ROW BEGIN ',
GROUP_CONCAT(
CONCAT(
'IF NOT(OLD.', column_name, ' <=> NEW.', column_name, ') THEN INSERT INTO AuditLog (',
'TableName, ',
'RowPK, ',
'FieldName, ',
'OldValue, ',
'NewValue'
') VALUES (''',
table_name, ''', NEW.',
pkField, ', ''',
column_name, ''', OLD.',
column_name, ', NEW.',
column_name,
'); END IF;'
)
SEPARATOR ' '
), ' END;$'
)
FROM
information_schema.columns
WHERE
table_schema = database()
AND table_name = tableName;
END$
DELIMITER ;
alt text http://pssnet.com/~devone/pssops3/testing/callprocedure.png