既然通过 FEDERATED 可以将数据同步过来,那么可以在 B 中建立 A 的映射。 因为映射表在程序 C 中并没有实际意义,需要将映射表的某些字段与 B 实际业务表的数据进行同步,可以采用 程序进行操作 或者 利用触发器和存储过程。
触发器示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
drop TRIGGER updateFromFed; #删除触发器,建立后需要删除才能修改
delimiter $$ #修改语句结束标志为$$ create TRIGGER insertFromFederated AFTER INSERT on federated_table for each ROW begin #状态=1执行插入操作 DECLARE de VARCHAR(128); set de = CONCAT(IFNULL(new.name,''),'-',IFNULL(new.age,''),'-',IFNULL(new.office,'')); if new.sts="1" THEN
INSERT into local1(id,name,description,sts) values (new.id,new.name,de,new.sts); INSERT into local2(id,name,office,sts) values (new.id,de,new.office,new.sts); END IF; END $$ delimiter ;
#mysql 下面的例子在把select into 的ID写死的时候设置参数值为空,但是在使用传进来的ID作为参数时设置参数值不为空。 show create procedure test;#查看 CALL test();#调用 drop procedure if exists test;#删除 in id VARCHAR(32) delimiter $$ create PROCEDURE test() begin DECLARE id VARCHAR(32); set id='8302'; DECLARE v_name VARCHAR(128)
SELECT local2.name INTO v_name from local2 where id = 5; select id,v_name; #INSERT into local2(id,name,office,sts) VALUES (id,des,'办公室','8'); end $$ delimiter ;