mysql-to-mysql
CREATE TABLE table_test (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
name varchar(255) not null,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:abc@192.168.88.16:3306/dbname/tablename'
-- 建立远程表需要开启federated引擎
-- 登录mysql终端执行:show engines,确认federated是否开启(是否是YES)
-- 如果没有开启,在my.ini中[mysqld]标签下下直接加上一行federated重启数据库服务即可
数据清洗
delimiter $$ -- 将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE app_info_add()
BEGIN
-- 定义变量
DECLARE s int DEFAULT 0;
DECLARE appId varchar(255);
DECLARE partnerId varchar(255);
DECLARE appIdSec varchar(255);
-- 定义游标,并将sql结果集赋值到游标中
DECLARE report CURSOR FOR select app_id,partner_id,app_id_sec from temp_app_info;
-- 声明当游标遍历完后将标志变量置成某个值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 打开游标
open report;
-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
fetch report into appId,partnerId,appIdSec;
-- 当s不等于1,也就是未遍历完时,会一直循环
while s<>1 do
-- 执行业务逻辑
UPDATE tbl_service_applet_info
SET partner_id=partnerId,mp_app_id=appId
WHERE app_id=appIdSec;
-- 将游标中的值再赋值给变量,供下次循环使用
fetch report into appId,partnerId,appIdSec;
-- 当s等于1时表明遍历以完成,退出循环
end while;
-- 关闭游标
close report;
END$$
delimiter; -- 将语句的结束符号恢复为分号
call app_info_add();