Я не вірю, що існує спосіб поєднати всі три твердження. Найближче до цього насправді не допомагає вам, і це ВИБІР НАСТРОЮ. Ваша найкраща ставка - курок. Нижче наведено зразок тригера, який я часто використовую, щоб підтримувати саме такий аудиторський слід (побудований за допомогою PHP):
$trigger = "-- audit trigger --\nDELIMITER $ \n".
"DROP TRIGGER IF EXISTS `{$prefix}_Audit_Trigger`$\n".
"CREATE TRIGGER `{$prefix}_Audit_Trigger` AFTER UPDATE ON `$this->_table_name` FOR EACH ROW BEGIN\n";
foreach ($field_defs as $field_name => $field) {
if ($field_name != $id_name) {
$trigger .= "IF (NOT OLD.$field_name <=> NEW.$field_name) THEN \n".'INSERT INTO AUDIT_LOG ('.
'Table_Name, Row_ID, Field_Name, Old_Value, New_Value, modified_by, DB_User) VALUES'.
"\n ('$this->_table_name',OLD.$this->_id_name,'$field_name',OLD.$field_name,NEW.$field_name,".
"NEW.modified_by, USER()); END IF;\n";
}
}
$trigger .= 'END$'."\n".'DELIMITER ;';