由 MySQL 使用 - 5.7 - x64
主表 1
CREATE TABLE `trg_02_1_test` (
`id_tbl_02_1` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`cur_datetime_tbl_02_1` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`pol_1_date_tbl_02_1` DATE NULL DEFAULT NULL,
`pol_2_enum_tbl_02_1` ENUM('Y','N') NULL DEFAULT NULL,
`pol_3_longtxt_tbl_02_1` LONGTEXT NULL,
`pol_4_txt_tbl_02_1` TEXT NULL,
`pol_5_int_tbl_02_1` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id_tbl_02_1`)
)
LONGTEXT\r\n'
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
AUTO_INCREMENT=7
;
日志表
CREATE TABLE `trg` (
`datetime_log` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
`tbl_02_name_log` TEXT NULL,
`id_tbl_02_n_log` INT(11) NULL DEFAULT NULL,
`tbl_02_pol_name_log` TEXT NULL,
`tbl_02_pol_content_log` TEXT NULL
)
LONGTEXT\r\n'
COLLATE='utf8_general_ci'
ENGINE=MyISAM
ROW_FORMAT=DYNAMIC
;
记录触发器
CREATE DEFINER=`root`@`%` TRIGGER `trg_02_1_test_before_update` BEFORE UPDATE ON `trg_02_1_test` FOR EACH ROW BEGIN
INSERT INTO trglog
Set
id_tbl_02_n_log = NEW.id_tbl_02_1,
tbl_02_pol_content_log = NEW.pol_4_txt_tbl_02_1;
END
它应该将几个表中的数据放在日志中。
问题。
如何登录:
在字段中tbl_02_name_log-替换了发生更新的表的名称;
- 在字段中-替换了发生更新 的字段tbl_02_pol_name_log的名称;
?
从触发器标题(代码的第一行,在 ON 和 FOR 之间)复制表名。仅作为字符串文字。
为每个表字段编写一个 INSERT,将当前处理的字段的名称替换为文字。因此,将有与字段表中一样多的 INSERT 查询(或收集动态文本以添加几条记录,然后使用单个查询执行)。
为了不写太多 - 比较 OLD.f 和 NEW.f,只有在存在不等式时才执行 INSERT。模板: