Mysql触发器:OLD和NEW如何序列化为字符串?

时间:2018-11-13 10:34:18

标签: mysql

  1. 我想实现的是,在更新表中的数据时,使用MySQL触发器将行记录更新之前的所有字段和所有已更新的字段转换为字符串,并将它们存储在另一个表中。
  2. 我目前的做法是使用CONCAT函数将字段拼接在一起,但是如果我有很多表,或者表中有很多字段,那就很麻烦了。
  3. MySQL是否可以将OLD和NEW序列化为字符串,然后将其插入表中的字段中?

这是矿井表并触发定义:

DROP TABLE IF EXISTS `tbl_name`;
CREATE TABLE `tbl_name` (
  `id` INT(10) NOT NULL COMMENT 'name ID',
  `name` VARCHAR(50) NOT NULL COMMENT 'name',
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `tbl_audit_log`;
CREATE TABLE `tbl_audit_log` (
  `id` INT (10) NOT NULL AUTO_INCREMENT COMMENT 'audit ID',
  `action` VARCHAR (10) NOT NULL COMMENT 'tbl_name action',
  `old_row_value` LONGTEXT COMMENT 'old row data value',
  `new_row_value` LONGTEXT COMMENT 'new row data value',
  `time` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT 'action time',
  PRIMARY KEY (`id`)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

DROP TRIGGER IF EXISTS `audit_name_update`;
DELIMITER ;;
CREATE TRIGGER `audit_name_update` AFTER UPDATE ON `tbl_name` FOR EACH ROW # After Update trigger
  BEGIN
    DECLARE k_old_value VARCHAR (4000) ; 
    DECLARE k_new_value VARCHAR (4000) ;
    SET k_old_value = CONCAT( '(', old.`id`, ',', old.`name`, ')' ) ;
    SET k_new_value = CONCAT( '(', new.`id`, ',', new.`name`, ')' ) ; 
    INSERT INTO `tbl_audit_log` ( `action`, `old_row_value`, `new_row_value`, `time` )
    VALUES ( 'update', k_old_value, k_new_value, NOW() ) ;
  END;;
DELIMITER ;

0 个答案:

没有答案
相关问题