1.在开发过程中,我们经常会遇到需要在不同的数据库中,针对某两张表的数据进行查询。针对这个问题,有不同的解决办法,博主在网上看到过的方法包括利用JDBC创建两个数据源的方法或者通过存储过程设计针对另一个数据库的查询函数。在此,我们通过触发器来实现不同数据库的表,同步到同一数据库的一张表中。
2.如下图所示,我们要将不同数据库中的表同步到同一数据库的一张表中,红框为不同的两张表,test为同步后的表,首先在任一数据库中新建test表,该表所要包含的字段为我们所需要的另外两张表的字段。
3. 如下图所示,为两张表分别创建相关的触发器,如图3.1所示,随后写触发器相关代码。
图3.1
4.图4.1为其中一个表的触发器器,该触发器会根据时间判断test表中是否有该时间段的数据,如果没有数据,就会将触发器关联表中的数据插入到test表中,插入的字段为触发器中sql语句所选定的字段。如果有数据,则会将触发器关联的表中的数据更新到test表中。同理,另一个表的触发器如图4.2所示。根据时间判断,将相关字段同步到test表中,因为两个触发器中的判断条件都是通过所关联表中的时间字段判断的,根据数据库字段时间和当前时间进行判断,进而可以实现将两张表中同一时间发生的改变同步到test表中。
图4.1
图4.2
尾部附相关代码例子
CREATE DEFINER=root
@localhost
TRIGGER test
AFTER insert
ON systemrundata
for each row
begin
declare count INT;
select COUNT(*) into count from lm.test where time = new.time;
if count = 0 THEN
INSERT INTO lm.test(time,DL,KLSD,KL,BJSLDQ,YW,Pump1Run,Pump2Run,Pump1Fre,Pump2Fre,YL) VALUES(new.time, new.DL,new.KLSD,new.KL,new.BJSLDQ,new.YW,new.Pump1Run,
new.Pump2Run,new.Pump1Fre,new.Pump2Fre,new.YL);
else
update lm.test set DL = new.DL,KLSD = new.KLSD,KL=new.KL,BJSLDQ=new.BJSLDQ,YW=new.YW,Pump1Run=new.Pump1Run,Pump2Run=new.Pump2Run,Pump1Fre=new.Pump1Fre,
Pump2Fre=new.Pump2Fre,YL=new.YL where time =new.time;
end if;
end