场景:数据同步
现有两个数据库,数据库s1 数据库s2 数据库s1下有country(国家表) province(省份表) city(城市表) s2数据库下有project表 这三个表分别有code(编码) name(名称) name_en(英文名称)这三个字段
s1数据库:
country表:
code | name | name_en |
CN | 中国 | china |
US | 美国 | USA |
province表:
code | name | name_en |
CN-11 | 浙江 | zhejaing |
CN-22 | 湖南 | hunan |
city表:
code | name | name_en |
FR-01-002 | 杭州 | hangzhou |
FR-01-003 | 嘉定 | jiading |
s2数据库:
project表:
ID | country_code | country_name | country_name_en | province_code | province_name | province_name_en | city_code | city_name | city_name_en |
1 | 21515 | 中国 | duhfuhu | 4644545 | 浙江 | fijhuh | fduhfueuh | 杭州 | jfbufhuf |
2 | jfiifii | 中国 | fjuhurfuh | fhirhfihi | 浙江 | hfuhfuhu | fuhruhu | 嘉定 | fijijfrij |
需求:把s1数据库的country province city表里面的数据同步到s2数据库的project表下面(更新数据)
我们这里使用脚本来做:
这里拿升级国家数据举例,制定规则,根据country_name不变来升级数据,除了下划线需要处理,以及想定义自己想要的变量之外,其他的都是固定格式
#升级国家
DROP PROCEDURE IF EXISTS basedatacoun;
DELIMITER // –导数据
CREATE PROCEDURE basedatacoun()
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE vcode varchar(100);
DECLARE vname varchar(200);
DECLARE vname_en varchar(100);
DECLARE datalist CURSOR FOR SELECT s1.country.code,s1.country.name,s1.country.name_en FROM s1.country;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done =1;
OPEN datalist;
WHILE done != 1 DO
FETCH
datalist INTO vcode,vname,vname_en;
UPDATE
s2.project SET s2.project.country_code=vcode ,s2.project.country_name_en = vname_en
WHERE
s2.project.country_name = vname;
END WHILE;
CLOSE datalist;
END//
DELIMITER ;
call basedatacoun()
执行脚本之后:
ID | country_code | country_name | country_name_en | province_code | province_name | province_name_en | city_code | city_name | city_name_en |
1 | CN | 中国 | china | 4644545 | 浙江 | fijhuh | fduhfueuh | 杭州 | jfbufhuf |
2 | CN | 中国 | china | fhirhfihi | 浙江 | hfuhfuhu | fuhruhu | 嘉定 | fijijfrij |
这样就把数据更换过来了 当数据量较大时,执行脚本可以快速的达到目的