数据库表结构的同步方法、装置、电子设备和存储介质制造方法及图纸

技术编号:19023429 阅读:18 留言:0更新日期:2018-09-26 19:04
本发明专利技术实施例提供一种数据库表结构的同步方法、装置、电子设备和存储介质,能够根据获取的数据库表结构信息自动生成差异比对结果、并自动生成sql语句。该方法包括:获取源数据库与目标数据库的表结构信息;根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;根据所述差异比对结果自动生成sql语句。通过以上步骤,能够显著提高数据库表结构的同步效率、降低编写sql语句的出错率。

【技术实现步骤摘要】
数据库表结构的同步方法、装置、电子设备和存储介质
本专利技术涉及计算机
,尤其涉及一种数据库表结构的同步方法、装置、电子设备和存储介质。
技术介绍
在电商等互联网企业采用数据库表结构存储数据的情形下,数据库表结构的设计和修改往往是一项非常繁琐的工程。尤其是,电商企业随着仓储系统的增多,经常会因为业务需求对数据库表结构做出适当的调整。时间一长,不同数据库中相同表的表结构会存在较大差异,进而给后期业务拓展带来诸多不便。因此,对不同数据库的表结构进行比对和同步的工作迫在眉睫。在现有技术中,往往是在故障或危害等不利影响出现之后才能得知可能是数据库表结构不一致的问题。然后,由数据库运维人员手动查询源库和目标库、人工对比源库和目标库的差异,再主观判断修改风险性,最后手动编写sql(结构化查询语言)语句。由此可见,现有技术中针对数据库表结构问题的排查具有滞后性。并且,由于需要数据库运维人员手动查询、比对数据库表结构、手动编写sql语句,导致数据库表结构的同步效率低、出错率高。
技术实现思路
有鉴于此,本专利技术实施例提供一种数据库表结构的同步方法、装置和存储介质,能够根据获取的数据库表结构信息自动生成差异比对结果、并自动生成sql语句,以提高数据库表结构的同步效率、降低编写sql语句的出错率。为实现上述目的,根据本专利技术的一个方面,提供了一种数据库表结构的同步方法。本专利技术实施例的一种数据库表结构的同步方法包括:获取源数据库与目标数据库的表结构信息;根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;根据所述差异比对结果自动生成sql语句。可选地,所述表结构信息包括:表、列、索引的信息;所述差异比对结果包括:表的差异比对结果、列的差异比对结果、索引的差异比对结果。可选地,根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果,还包括:在表结构信息中引入表、列、索引的状态属性;对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置所述状态属性的取值。可选地,根据所述差异比对结果自动生成sql语句,还包括:根据表的状态属性的取值的设置结果生成表的sql语句;根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中;根据索引的状态属性的取值的设置结果生成索引的sql语句。可选地,对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置所述状态属性的取值,还包括:对表的信息进行遍历、比对,若表只存在于源数据库,则将该表的状态属性的取值设为ADDED;若表只存在于目标数据库,则将该表的状态属性的取值设为DELETED;若表在源数据库、目标数据库都存在,则将该表的状态属性设为UNKNOWN,并对该表中列的信息、索引的信息进行遍历;若列/索引只存在于源数据库,则将该列/索引的状态属性的取值设为ADDED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引只存在于目标数据库,则将该列/索引的状态属性的取值设为DELETED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引在源数据库、目标数据库都存在、且列/索引的属性都相同,则将列/索引的状态属性的取值设为SAME,若列/索引在源数据库、目标数据库都存在、且列/索引的属性不同,则将列/索引的状态属性的取值设为CHANGED。可选地,根据所述差异比对结果自动生成sql语句,还包括:若表的状态属性的取值为ADDED,则生成新建表的sql语句;若表的状态属性的取值为DELETED,则生成删除表的sql语句;若表的状态属性的取值为CHANGED,则根据列的状态属性的取值的设置结果生成列的sql语句。可选地,所述方法还包括:在生成列的sql语句之后,遍历索引的状态属性的取值的设置结果,若索引的状态属性的取值为ADDED或DELETED、且该索引是主键且有自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象中存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。可选地,所述方法还包括:在表结构信息中引入表的sql属性,并将生成的表、列、索引的sql语句保存至所述sql属性中。为实现上述目的,根据本专利技术的另一方面,提供了一种数据库表结构的同步装置。本专利技术实施例的一种数据库表结构的同步装置包括:获取模块,用于获取源数据库与目标数据库的表结构信息;差异比对模块,用于根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;sql语句生成模块,用于根据所述差异比对结果自动生成sql语句。可选地,所述表结构信息包括:表、列、索引的信息;所述差异比对结果包括:表的差异比对结果、列的差异比对结果、索引的差异比对结果。可选地,所述差异比对模块根据所述表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果,还包括:对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置表、列、索引的状态属性的取值;所述sql语句生成模块根据差异比对结果生成sql语句,还包括:根据表的状态属性的取值的设置结果生成表的sql语句;根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中;根据索引的状态属性的取值的设置结果生成索引的sql语句;其中,表、列、索引的状态属性是由所述获取模块引入至表结构信息中的。可选地,所述差异比对模块对表结构信息进行遍历、比对,并根据比对出的表结构差异设置表、列、索引的状态属性的取值,还包括:对表的信息进行遍历、比对,若表只存在于源数据库,则将该表的状态属性的取值设为ADDED;若表只存在于目标数据库,则将该表的状态属性的取值设为DELETED;若表在源数据库、目标数据库都存在,则将该表的状态属性设为UNKNOWN,并对该表中列的信息、索引的信息进行遍历;若列/索引只存在于源数据库,则将该列/索引的状态属性的取值设为ADDED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引只存在于目标数据库,则将该列/索引的状态属性的取值设为DELETED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引在源数据库、目标数据库都存在、且列/索引的属性都相同,则将列/索引的状态属性的取值设为SAME,若列/索引在源数据库、目标数据库都存在、且列/索引的属性不同,则将列/索引的状态属性的取值设为CHANGED。可选地,所述sql语句生成模块根据所述差异比对结果自动生成sql语句,还包括:若表的状态属性的取值为ADDED,则生成新建表的sql语句;若表的状态属性的取值为DELETED,则生成删除表的sql语句;若表的状态属性的取值为CHANGED,则根据列的状态属性的取值的设置结果生成列的sql语句。可选地,所述sql语句生成模块还用于:在生成列的sql语句之后,遍历索引的状态属性的取值的设置结果;若索引的状态属性的取值为ADDED或DELETED、且该索引是主键且有自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象存在该自增列的sq本文档来自技高网...

【技术保护点】
1.一种数据库表结构的同步方法,其特征在于,包括:获取源数据库与目标数据库的表结构信息;根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;根据所述差异比对结果自动生成sql语句。

【技术特征摘要】
1.一种数据库表结构的同步方法,其特征在于,包括:获取源数据库与目标数据库的表结构信息;根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;根据所述差异比对结果自动生成sql语句。2.根据权利要求1所述的方法,其特征在于,所述表结构信息包括:表、列、索引的信息;所述差异比对结果包括:表的差异比对结果、列的差异比对结果、索引的差异比对结果。3.根据权利要求2所述的方法,其特征在于,根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果,还包括:在表结构信息中引入表、列、索引的状态属性;对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置所述状态属性的取值。4.根据权利要求3所述的方法,其特征在于,根据所述差异比对结果自动生成sql语句,还包括:根据表的状态属性的取值的设置结果生成表的sql语句;根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中;根据索引的状态属性的取值的设置结果生成索引的sql语句。5.根据权利要求3所述的方法,其特征在于,对源数据库、目标数据库的表结构信息进行遍历、比对,根据比对出的表结构差异设置所述状态属性的取值,还包括:对表的信息进行遍历、比对,若表只存在于源数据库,则将该表的状态属性的取值设为ADDED;若表只存在于目标数据库,则将该表的状态属性的取值设为DELETED;若表在源数据库、目标数据库都存在,则将该表的状态属性设为UNKNOWN,并对该表中列的信息、索引的信息进行遍历;若列/索引只存在于源数据库,则将该列/索引的状态属性的取值设为ADDED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引只存在于目标数据库,则将该列/索引的状态属性的取值设为DELETED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引在源数据库、目标数据库都存在、且列/索引的属性都相同,则将列/索引的状态属性的取值设为SAME,若列/索引在源数据库、目标数据库都存在、且列/索引的属性不同,则将列/索引的状态属性的取值设为CHANGED。6.根据权利要求4所述的方法,其特征在于,根据所述差异比对结果自动生成sql语句,还包括:若表的状态属性的取值为ADDED,则生成新建表的sql语句;若表的状态属性的取值为DELETED,则生成删除表的sql语句;若表的状态属性的取值为CHANGED,则根据列的状态属性的取值的设置结果生成列的sql语句。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:在生成列的sql语句之后,遍历索引的状态属性的取值的设置结果,若索引的状态属性的取值为ADDED或DELETED、且该索引是主键且有自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象中存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。8.根据权利要求1所述的方法,其特征在于,所述方法还包括:在表结构信息中引入表的sql属性,并将生成的表、列、索引的sql语句保存至所述sql属性中。9.一种数据库表结构的同步装置,其特征在于,包括:获取模块,用于获取源数据库与目标数据库的表结构信息;差异比对模块,用于根据所述表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果;sql语句生成模块,用于根据所述差异比对结果自动生成sql语句。10.根据权利要求9所述的装...

【专利技术属性】
技术研发人员:吴明波
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1