初写数据库脚本

  • Post author:
  • Post category:其他

场景:数据同步

        现有两个数据库,数据库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

这样就把数据更换过来了  当数据量较大时,执行脚本可以快速的达到目的

 


版权声明:本文为huangpengniubi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。