假设我们要监视表 'table1' 中的变化
CREATE TABLE `table1` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`value` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=10;
上面是创建“table1”的查询,它包含一个“id”列,它是自动递增的
创建另一个表来存储更改。查询如下
CREATE TABLE `changes` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`changes` VARCHAR(200) NULL DEFAULT '0',
`change_time` TIMESTAMP NULL DEFAULT NULL,
`tablename` VARCHAR(50) NULL DEFAULT NULL,
`changed_id` VARCHAR(10) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
COLLATE='latin1_swedish_ci'
ENGINE=InnoDB
AUTO_INCREMENT=21;
现在在第一个表中创建一个触发器,即.. 'table1' 查询如下所示
delimiter |
create trigger trg_table1 AFTER INSERT ON table1
FOR EACH ROW BEGIN
DECLARE lastid INT DEFAULT 0;
SELECT max(id) INTO lastid from table1;
insert into changes values(null,'insert',now(),'table1',lastid);
end;
|
delimiter ;
现在,如果您尝试在“table1”中插入任何内容,其详细信息将自动插入到更改表中。在更改表中更改表示更改的类型,即插入、更新等 change_time 表示发生更改的时间 tablename 表示发生更改的表 changed_id 表示“table1”中新插入行的 id
现在创建一个不断从“更改”表中读取的 java 程序。“更改”表中的新条目意味着数据库发生了某些事情。从“更改”表中的每条记录中,您可以了解插入操作发生在哪个表中。基于此,您可以执行适当的操作。执行适当的操作后,从“更改”表中删除该行。
您可以为数据库中的每个表创建触发器(就像我上面所做的那样)...从“更改”表的“表名”列中,您可以了解插入发生在哪个表中。