数据迁移:vlookup和mysql定时执行

    无论在哪个项目中,数据永远是重要的,不可忽视的,但也是闹心的。何谓之闹心?且听我慢慢道来。

    数据库的更迭现在变得很是频繁,从以前的关系型数据库到现在的非关系型数据库,从以前单一的使用到现在多个的搭配,可以看到,数据如果想要进行迁移,将会困难重重,麻烦不断,首先就要面对数据库的差异,其次是表字段的不同,最后还有主键ID的生成问题等等。所以,一套简单实用的方法在这个时候就很必要了,不但能大大的减少工作量,还能保证数据的完整性,何乐而不为呢?下面就来一一解读:

    一、excel表格函数vlookup

     1、什么是vlookup

    在整理数据前,首先要做的肯定是将之前的数据库表导到excel表格中,这种基本的操作这里就不演示了。在整理数据时,很多字段需要进行变换,这是一项重复性很高的操作,如果不利用excel特有的函数来处理的话,将很是麻烦且令人头痛。vlookup函数的好处在于可以快速且方便的查找,将两个表格关联进行跨表引用,非常实用,语法规则如下:

VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

参数 简单说明 输入数据类型 lookup_value 要查找的值 数值、引用或文本字符串 table_array 要查找的区域 数据表区域 col_index_num 返回数据在查找区域的第几列  正整数 range_lookup 模糊匹配/精确匹配 TRUE(或不填)/FALSE

参数说明:

Lookup_value为需要在数据表第一列中进行查找的数值。Lookup_value 可以为数值、引用或文本字符串。当vlookup函数第一参数省略查找值时,表示用0查找。

Table_array为需要在其中查找数据的数据表。使用对区域或区域名称的引用。

col_index_num为table_array 中查找数据的数据列序号。col_index_num 为 1 时,返回 table_array 第一列的数值,col_index_num 为 2 时,返回 table_array 第二列的数值,以此类推。如果 col_index_num 小于1,函数 VLOOKUP 返回错误值#VALUE!;如果 col_index_num 大于 table_array 的列数,函数 VLOOKUP 返回错误值#REF!。

Range_lookup为一逻辑值,指明函数 VLOOKUP 查找时是精确匹配,还是近似匹配。如果为false或0 ,则返回精确匹配,如果找不到,则返回错误值 #N/A。如果 range_lookup 为TRUE或1,函数 VLOOKUP 将查找近似匹配值,也就是说,如果找不到精确匹配值,则返回小于 lookup_value 的最大数值。如果range_lookup 省略,则默认为近似匹配。

     简单的来说,VLOOKUP函数是Excel中的一个纵向查找函数,在工作中都有广泛应用,例如可以用来核对数据,多个表格之间快速导入数据等函数功能。功能是按列查找,最终返回该列所需查询列序所对应的值。

    2、vlookup函数的使用

    先选定需要查询的值,然后选择要查询的区域(同时打开两张表格,必须是和要查询的值有关联的,否则查询不到),最后选择需要的数据的所在列和查询样式(一般用0),如下图所示:

    具体的使用步骤可以参考:http://www.jb51.net/office/excel/350609.html,多使用几次就熟能生巧了,挺实用的。

    二、mysql定时执行

    整理好数据后需要导入表,但由于主键ID的唯一性,需要在导入后生成各自的ID。首先将要导入的表的主键勾选去掉(不然导入会失败,mysql数据库是这样的),导入整理好的excel数据,导入成功后发现这些数据的ID均为空,所以还要进行ID的生成(生成ID后将表的主键勾选保存)。

    具体的操作步骤如下:

  (1)查看event是否开启:

   show variables like '%sche%';

  (2)将事件计划开启:

   set global event_scheduler =1;

  (3)创建存储过程test(其中一个为例,需要根据情况进行修改):

   CREATE PROCEDURE test()

   BEGIN

   UPDATE sy_city SET CITY_ID=REPLACE(UUID(),'-','')

   WHERE CITY_ID= (SELECT CITY_ID FROM (SELECT * FROM

   sy_city s WHERE s.CITY_ID='' LIMIT 1) a);

  END;

  (4)创建event e_test(下面的test()是上面第三步中创建的test):

   create event if not exists e_test

   on schedule every 30 second 

   on completion preserve

   do call test();

   经过以上步骤后基本完成ID的生成。

   详情可查阅链接:http://database.51cto.com/art/201006/204716.htm,根据需要修改。

文章来源:

Author:海岸线的曙光
link:https://my.oschina.net/u/3747963/blog/1603937