CN108572996A - 数据库表结构的同步方法、装置、电子设备和存储介质 - Google Patents
数据库表结构的同步方法、装置、电子设备和存储介质 Download PDFInfo
- Publication number
- CN108572996A CN108572996A CN201710149902.5A CN201710149902A CN108572996A CN 108572996 A CN108572996 A CN 108572996A CN 201710149902 A CN201710149902 A CN 201710149902A CN 108572996 A CN108572996 A CN 108572996A
- Authority
- CN
- China
- Prior art keywords
- column
- index
- value
- sql statement
- state attribute
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 47
- 230000001360 synchronised effect Effects 0.000 title abstract 3
- 238000010586 diagram Methods 0.000 description 12
- 238000012423 maintenance Methods 0.000 description 8
- 238000012986 modification Methods 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000006870 function Effects 0.000 description 3
- 238000011835 investigation Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002411 adverse Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000000470 constituent Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000001172 regenerating effect Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供一种数据库表结构的同步方法、装置、电子设备和存储介质,能够根据获取的数据库表结构信息自动生成差异比对结果、并自动生成sql语句。该方法包括:获取源数据库与目标数据库的表结构信息;根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果;根据所述差异比对结果自动生成sql语句。通过以上步骤,能够显著提高数据库表结构的同步效率、降低编写sql语句的出错率。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种数据库表结构的同步方法、装置、电子设备和存储介质。
背景技术
在电商等互联网企业采用数据库表结构存储数据的情形下,数据库表结构的设计和修改往往是一项非常繁琐的工程。尤其是,电商企业随着仓储系统的增多,经常会因为业务需求对数据库表结构做出适当的调整。时间一长,不同数据库中相同表的表结构会存在较大差异,进而给后期业务拓展带来诸多不便。因此,对不同数据库的表结构进行比对和同步的工作迫在眉睫。
在现有技术中,往往是在故障或危害等不利影响出现之后才能得知可能是数据库表结构不一致的问题。然后,由数据库运维人员手动查询源库和目标库、人工对比源库和目标库的差异,再主观判断修改风险性,最后手动编写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语句;若上下文对象存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。
可选地,所述获取模块还用于:在表结构信息中引入表的sql属性;所述sql语句生成模块还用于:将生成的表、列、索引的sql语句保存至所述sql属性中。
为实现上述目的,根据本发明的再一方面,提供了一种电子设备。
本发明实施例的一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行本发明所提供的数据库表结构的同步方法。
为实现上述目的,根据本发明的再一方面,提供了一种非暂态计算机可读存储介质。
本发明实施例的一种非暂态计算机可读存储介质,用于存储计算机指令,所述计算机指令用于使所述计算机执行本发明所提供的数据库表结构的同步方法。
根据本发明的技术方案,上述发明中的一个实施例具有如下优点或有益效果:通过根据获取的表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果,从而能够对数据库表结构进行快速比对,解决了以前由运维人员手动进行数据库表结构比对造成的排查时间长、效率低的问题;通过根据差异比对结果自动生成sql语句,从而能够快速、准确地生成sql语句,解决了以前由运维人员手动进行sql语句编写造成的出错率高、耗时长的问题。
上述非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是根据本发明实施例的数据库表结构的同步方法的主要步骤的示意图;
图2是根据本发明实施例的自动进行数据库表结构差异比对的主要步骤的示意图;
图3是根据本发明实施例的自动生成sql语句的主要步骤的示意图;
图4是根据本发明实施例的自动进行数据库表结构差异比对的流程示意图;
图5是根据本发明实施例的自动生成sql语句的流程示意图;
图6是根据本发明实施例的数据库表结构的同步装置的主要组成模块的示意图;
图7是根据本发明实施例的数据库表结构同步方法的电子设备的硬件结构示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
本发明的发明人发现,现有的数据库表结构同步方法存在以下缺陷:第一、在出现不利影响之后才可能发现数据库表结构不一致的问题,即问题的发现具有滞后性;第二、人工手动对数据库表结构进行比对,比对耗时长、效率低;第三、人工手动编写sql语句,编写出错率高、耗时长。为了克服以上技术缺陷,本发明的发明人提出了一种新的数据库表结构的同步方法、装置、电子设备和存储介质。
图1是根据本发明实施例的数据库表结构的同步方法的主要步骤的示意图。
如图1所示,本发明实施例的数据库表结构的同步方法主要包括以下步骤:
步骤S1、获取源数据库与目标数据库的表结构信息。
在该步骤中,可通过saltstack这一客户端/服务端管理工具获取源数据库、目标数据库的表结构信息。应理解的是,也可通过其他工具或者其他方式获取表结构信息。
其中,所述表结构信息包括:表、列、索引的信息。例如,表结构信息可具体为以下信息:数据库中有多少张表,表中有多少列,每个列的属性如列名、类型、是否为空、默认值、额外参数,每个索引的属性如列字段、索引类型。所述差异比对结果包括:表的差异比对结果、列的差异比对结果、索引的差异比对结果。
步骤S2、根据所述表结构信息对源数据库、目标数据库自动进行差异比对,生成差异比对结果。
步骤S3、根据所述差异比对结果自动生成sql语句。
在本发明实施例中,通过根据获取的源数据库、目标数据库的表结构信息自动进行差异比对,生成差异比对结果,实现了数据库表结构的快速比对,解决了以前由运维人员手动进行数据库表结构比对造成的排查时间长、效率低的问题;通过根据差异比对结果自动生成sql语句,实现了快速、准确地生成sql语句,解决了以前由运维人员手动进行sql语句编写造成的出错率高、耗时长的问题。
图2是根据本发明实施例的自动进行数据库表结构差异比对的主要步骤的示意图。
如图2所示,本发明实施例的自动进行数据库表结构差异比对的方法主要包括如下步骤:
步骤S21、在表结构信息中引入表、列、索引的状态属性。
在具体实施时,可根据源数据库、目标数据库可能出现的差异设计状态属性的可选取值。例如,可将表的状态属性的可选取值设为:ADDED(增加)、DELETED(删除)、CHANGED(修改)、UNKNOWN(未知),可将列的状态属性的可选取值设为:ADDED(增加)、DELETED(删除)、CHANGED(修改)、SAME(相同);可将索引的状态属性的可选取值设为:ADDED(增加)、DELETED(删除)、CHANGED(修改)、SAME(相同)。并且,为了便于遍历、比对,可将表、列、索引的状态属性的初始取值统一设为UNKNOWN。
步骤S22、对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置所述状态属性的取值。
在本发明实施例中,通过在表结构信息中引入表、列、索引的状态属性,便于后续根据状态属性的取值设置结果自动生成sql语句,进一步提高了生成sql语句的效率,降低了生成sql语句的出错率。
图3是根据本发明实施例的自动生成sql语句的主要步骤的示意图。
如图3所示,本发明实施例的自动生成sql语句的方法主要包括如下步骤:
步骤S31、根据表的状态属性的取值的设置结果生成表的sql语句。
步骤S32、根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中。
在具体实施时,在将列的sql语句暂存在上下文对象时可采取如下记录格式:列名-sql语句。采用这种存储格式,便于进行查询、处理。应理解的是,本领域技术人员也可以采取其他记录格式。
在步骤S32之后,执行步骤S33。
步骤S33、根据索引的状态属性的取值的设置结果生成索引的sql语句。
在本发明实施例中,通过在内存中创建上下文对象,便于对列的sql语句进行管理;并且在对索引的状态属性的取值进行遍历时,通过查询上下文对象,可以避免出现sql语句重复和不能删除自增主键的问题。
进一步的,为了对生成的sql语句进行管理,本发明实施例的数据库表结构的同步方法还包括以下步骤:在表结构信息中引入表的sql属性,并将生成的表、列、索引的sql语句保存至表的sql属性中。
图4是根据本发明实施例的自动进行数据库表结构差异比对的流程示意图。
如图4所示,本发明实施例的自动进行数据库表结构差异比对的流程如下:
A1、对表的信息进行遍历、比对。
A2、判断表在源数据库、目标数据库是否都存在。
A3、若表只存在于源数据库,则将源数据库中表的状态属性的取值设为ADDED。
A4、若表只存在于目标数据库,则将目标数据库中表的状态属性的取值设为DELETED。
A5、若表在源数据库、目标数据库都存在,则将目标数据库中表的状态属性的取值设为UNKNOWN。
A6、对列/索引的信息进行遍历、比对。在具体实施时,可以先对列的信息进行遍历、比对,也可以先对索引的信息进行遍历、比对。
A7、判断列/索引在源数据库、目标数据库是否都存在。
A8、若列/索引只存在于源数据库,则将源数据库中列/索引的状态属性的取值设为ADDED。
A9、若列/索引只存在于目标数据库,则将目标数据库中列/索引的状态属性的取值设为DELETED。
A10、判断源数据库与目标数据库中列/索引的属性是否相同。
A11、若列/索引的属性相同,则将目标数据库中列/索引的状态属性的取值设为SAME。
A12、若列/索引的属性不同,则将目标数据库中列/索引的状态属性的取值设为CHANGED。
图5是根据本发明实施例的自动生成sql语句的流程示意图。
如图5所示,本发明实施例的自动生成sql语句的流程具体如下:
B1、遍历表的状态属性的取值的设置结果。
B2、检查表的状态属性的取值。
B3、若表的状态属性的取值为ADDED,则生成新建表的sql语句。
B4、若表的状态属性的取值为DELETED,则生成删除表的sql语句。
B5、若表的状态属性的取值为CHANGED,则遍历列的状态属性的取值的设置结果。
B6、根据列的状态属性的取值的设置结果生成列的sql语句,并将生成的列的sql语句暂存于上下文对象中。在该步骤中,根据列的状态属性的取值的设置结果生成列的sql语句可包括:当列的状态属性的取值为ADDED时,则生成新建列的sql语句;当列的状态属性的取值为DELETED时,则生成删除列的sql语句;当列的状态属性的取值为CHANGED时,则生成修改列的sql语句。
B7、遍历索引的状态属性的取值的设置结果。
B8、检查索引的状态属性的取值。
B9、若索引的状态属性的取值为CHANGED,则生成修改索引的sql语句。
B10、若索引的状态属性的取值为ADDED或DELETED,则判断该索引是否为主键。若该索引不是主键,则进入步骤B11;若该索引是主键,则进入步骤B12。
B11、若该索引不是主键,则生成索引的sql语句。具体来说,当索引的状态属性的取值为ADDED时,生成新建索引的sql语句;当索引的状态属性的取值为DELETED时,生成删除索引的sql语句。
B12、若该索引不是主键,则判断该索引是否包含自增列。若该索引不包含自增列,则进入步骤B13;若该索引包含自增列,则进入步骤B14。
B13、若该索引不包含自增列,则生成索引的sql语句。
B14、若该索引包含自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。
进一步的,在生成索引的sql语句后,也可将索引的sql语句暂存在上下文对象中。
在本发明实施例中,在索引状态为DELETED或ADDED时,通过先判断该索引是否为主键并且是否自增,并在是主键且自增时先删除上下文对象中的自增列的sql语句、再生成索引的sql语句,很好地避免了出现重复sql语句和不能删除自增主键的问题。
根据本发明的实施例,本发明还提供了一种数据库表结构的同步装置。
如图6所示,本发明实施例的数据库表结构的同步装置主要包括以下模块:
获取模块601,用于获取源数据库与目标数据库的表结构信息。
在具体实施时,获取模块可以基于saltstack这一客户端/服务端管理工具获取表结构信息。应理解的是,也可通过其他工具或者其他方式获取表结构信息。
其中,所述表结构信息包括:表、列、索引的信息。例如,表结构信息可具体为以下信息:数据库中有多少张表,表中有多少列,每个列的属性如列名、类型、是否为空、默认值、额外参数,每个索引的属性如列字段、索引类型。所述差异比对结果包括:表的差异比对结果、列的差异比对结果、索引的差异比对结果。
差异比对模块602,用于根据所述表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果。
其中,差异比对模块602根据所述表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果,包括:对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置表、列、索引的状态属性的取值。其中,表、列、索引的状态属性是由获取模块601引入至表结构信息中的。
sql语句生成模块603,用于根据所述差异比对结果自动生成sql语句。
其中,sql语句生成模块603根据差异比对结果生成sql语句,包括:根据表的状态属性的取值的设置结果生成表的sql语句;根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中;根据索引的状态属性的取值的设置结果生成索引的sql语句;
在本发明实施例中,通过设置差异比对模块可自动进行差异比对,生成差异比对结果,实现了数据库表结构的快速比对,解决了以前由运维人员手动进行数据库表结构比对造成的排查时间长、效率低的问题;通过设置sql语句生成模块可自动生成sql语句,实现了快速、准确地生成sql语句,解决了以前由运维人员手动进行sql语句编写造成的出错率高、耗时长的问题。
进一步的,在本发明实施例中,通过由获取模块在表结构信息中引入表、列、索引的状态属性,便于后续根据状态属性的取值设置结果自动生成sql语句,进一步提高了生成sql语句的效率,降低了生成sql语句的出错率。
进一步的,通过在内存中创建上下文对象,便于对列的sql语句进行管理;并且在对索引的状态属性的取值进行遍历时,通过查询上下文对象,可以避免出现sql语句重复和不能删除自增主键的问题。
在本发明实施例中,差异比对模块602进行遍历、比对,设置表、列、索引的状态属性的取值,主要包括以下处理流程:
对表的信息进行遍历、比对。若表只存在于源数据库,则将该表的状态属性的取值设为ADDED;若表只存在于目标数据库,则将该表的状态属性的取值设为DELETED;若表在源数据库、目标数据库都存在,则将该表的状态属性设为UNKNOWN,并对该表中列的信息、索引的信息进行遍历。
对列/索引的信息进行遍历、比对。若列/索引只存在于源数据库,则将该列/索引的状态属性的取值设为ADDED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引只存在于目标数据库,则将该列/索引的状态属性的取值设为DELETED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引在源数据库、目标数据库都存在、且列/索引的属性都相同,则将列/索引的状态属性的取值设为SAME,若列/索引在源数据库、目标数据库都存在、且列/索引的属性不同,则将列/索引的状态属性的取值设为CHANGED。
在本发明实施例中,sql语句生成模块603自动生成sql语句,主要包括以下处理流程:
遍历表的状态属性的取值的设置结果。若表的状态属性的取值为ADDED,则生成新建表的sql语句。若表的状态属性的取值为DELETED,则生成删除表的sql语句。
若表的状态属性的取值为CHANGED,则遍历列的状态属性的取值的设置结果。根据列的状态属性的取值的设置结果生成列的sql语句,并将生成的列的sql语句暂存于上下文对象中。
遍历索引的状态属性的取值的设置结果。若索引的状态属性的取值为CHANGED,则生成修改索引的sql语句;若索引的状态属性的取值为ADDED或DELETED,则判断该索引是否为主键。进一步,若该索引不是主键,则生成索引的sql语句;若该索引不是主键,则判断该索引是否包含自增列。进一步,若该索引不包含自增列,则生成索引的sql语句;若该索引包含自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。进一步的,在生成索引的sql语句后,也可将索引的sql语句暂存在上下文对象中。
在本发明实施例中,在索引状态为DELETED或ADDED时,通过sql语句生成模块先判断该索引是否为主键并且是否自增,并在是主键且自增时先删除上下文对象中的自增列的sql语句、再生成索引的sql语句,很好地避免了出现重复sql语句和不能删除自增主键的问题。
进一步的,为了便于对生成的sql语句进行管理,还可由获取模块601在表结构信息中引入表的sql属性,并将生成的表、列、索引的sql语句保存至所述sql属性中。
根据本发明的实施例,本发明还提供了一种电子设备和一种可读存储介质。
本发明的电子设备包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器执行本发明所提供的数据库表结构的同步方法。
本发明的非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行本发明所提供的数据库表结构的同步方法。
图7是根据本发明实施例的数据库表结构同步方法的电子设备的硬件结构示意图。
如图7所示,该电子设备包括:一个或多个处理器702以及存储器701,图7中以一个处理器702为例。其中,存储器701即为本发明所提供的非暂态计算机可读存储介质。
进一步的,实现数据库表结构同步方法的电子设备还可以包括:输入装置703和输出装置704。
处理器702、存储器701、输入装置703和输出装置704可以通过总线或者其他方式连接,图7中以通过总线连接为例。
存储器701作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的数据库表结构同步方法对应的程序指令/模块(例如,附图6所示的获取模块601、差异比对模块602、sql语句生成模块603)。处理器702通过运行存储在存储器701中的非暂态软件程序、指令以及模块,从而执行服务器的各种功能应用以及数据处理,即实现上述方法实施例中的数据库表结构的同步方法。
存储器701可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序;存储数据区可存储根据数据库表结构同步装置的使用所创建的数据等。此外,存储器701可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器701可选包括相对于处理器702远程设置的存储器,这些远程存储器可以通过网络连接至数据库表结构的同步装置。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置703可接收输入的数字或字符信息,以及产生与数据库表结构同步装置的用户设置以及功能控制有关的键信号输入。输出装置704可包括显示屏等显示设备。
所述一个或者多个模块存储在所述存储器701中,当被所述一个或者多个处理器702执行时,执行上述任意方法实施例中的信息验证的方法。
上述产品可执行本发明实施例所提供的方法,具备执行方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明实施例所提供的方法。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (17)
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.根据权利要求10所述的装置,其特征在于,所述差异比对模块根据所述表结构信息对源数据库、目标数据库自动进行差异比对,自动生成差异比对结果,还包括:对源数据库、目标数据库的表结构信息进行遍历、比对,并根据比对出的表结构差异设置表、列、索引的状态属性的取值;
所述sql语句生成模块根据差异比对结果生成sql语句,还包括:根据表的状态属性的取值的设置结果生成表的sql语句;根据列的状态属性的取值的设置结果生成列的sql语句,并将列的sql语句暂存于预先在内存中创建的上下文对象中;根据索引的状态属性的取值的设置结果生成索引的sql语句;
其中,表、列、索引的状态属性是由所述获取模块引入至表结构信息中的。
12.根据权利要求11所述的装置,其特征在于,所述差异比对模块对表结构信息进行遍历、比对,并根据比对出的表结构差异设置表、列、索引的状态属性的取值,还包括:
对表的信息进行遍历、比对,若表只存在于源数据库,则将该表的状态属性的取值设为ADDED;若表只存在于目标数据库,则将该表的状态属性的取值设为DELETED;若表在源数据库、目标数据库都存在,则将该表的状态属性设为UNKNOWN,并对该表中列的信息、索引的信息进行遍历;
若列/索引只存在于源数据库,则将该列/索引的状态属性的取值设为ADDED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引只存在于目标数据库,则将该列/索引的状态属性的取值设为DELETED,并将该列/索引所在表的状态属性的取值设为CHANGED;若列/索引在源数据库、目标数据库都存在、且列/索引的属性都相同,则将列/索引的状态属性的取值设为SAME,若列/索引在源数据库、目标数据库都存在、且列/索引的属性不同,则将列/索引的状态属性的取值设为CHANGED。
13.根据权利要求11所述的装置,其特征在于,所述sql语句生成模块根据所述差异比对结果自动生成sql语句,还包括:
若表的状态属性的取值为ADDED,则生成新建表的sql语句;若表的状态属性的取值为DELETED,则生成删除表的sql语句;
若表的状态属性的取值为CHANGED,则根据列的状态属性的取值的设置结果生成列的sql语句。
14.根据权利要求13所述的装置,其特征在于,所述sql语句生成模块还用于:
在生成列的sql语句之后,遍历索引的状态属性的取值的设置结果;若索引的状态属性的取值为ADDED或DELETED、且该索引是主键且有自增列,则查询上下文对象是否存在该自增列的sql语句;若上下文对象存在该自增列的sql语句,则先将该自增列的sql语句从上下文对象中删除,再生成该索引的sql语句。
15.根据权利要求9所述的装置,其特征在于,所述获取模块还用于:在表结构信息中引入表的sql属性;
所述sql语句生成模块还用于:将生成的表、列、索引的sql语句保存至所述sql属性中。
16.一种电子设备,其特征在于,包括:
至少一个处理器;以及,
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-8中任一项所述的方法。
17.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1-8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710149902.5A CN108572996B (zh) | 2017-03-14 | 2017-03-14 | 数据库表结构的同步方法、装置、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710149902.5A CN108572996B (zh) | 2017-03-14 | 2017-03-14 | 数据库表结构的同步方法、装置、电子设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108572996A true CN108572996A (zh) | 2018-09-25 |
CN108572996B CN108572996B (zh) | 2021-02-26 |
Family
ID=63578580
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710149902.5A Active CN108572996B (zh) | 2017-03-14 | 2017-03-14 | 数据库表结构的同步方法、装置、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108572996B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284297A (zh) * | 2018-10-29 | 2019-01-29 | 中译语通科技股份有限公司 | 一种数据库智能更新方法及系统 |
CN109828889A (zh) * | 2019-01-31 | 2019-05-31 | 平安科技(深圳)有限公司 | 监控数据库的方法、装置、计算机设备和存储介质 |
CN109885581A (zh) * | 2019-03-14 | 2019-06-14 | 苏州达家迎信息技术有限公司 | 数据库的同步方法、装置、设备及存储介质 |
CN110287182A (zh) * | 2019-05-05 | 2019-09-27 | 浙江吉利控股集团有限公司 | 一种大数据的数据对比方法、装置、设备及终端 |
CN110286883A (zh) * | 2019-06-03 | 2019-09-27 | 中国建设银行股份有限公司 | 智能数据库编码监控方法、装置及电子设备 |
CN110543476A (zh) * | 2019-07-03 | 2019-12-06 | 威富通科技有限公司 | 一种数据库表结构的同步方法、装置及服务器 |
CN111104409A (zh) * | 2019-12-25 | 2020-05-05 | 上海米哈游天命科技有限公司 | 一种数据库处理方法、装置、存储介质及电子设备 |
CN111159020A (zh) * | 2019-12-20 | 2020-05-15 | 武汉达梦数据库有限公司 | 一种应用于同步软件测试的方法和装置 |
CN111198902A (zh) * | 2018-11-16 | 2020-05-26 | 长鑫存储技术有限公司 | 元数据管理方法、装置、存储介质及电子设备 |
CN111431984A (zh) * | 2020-03-02 | 2020-07-17 | 畅捷通信息技术股份有限公司 | 应用数据的同步方法、同步装置和计算机可读存储介质 |
CN111459916A (zh) * | 2020-04-16 | 2020-07-28 | 中国银行股份有限公司 | Gbase和oracle数据库表比对的方法及系统 |
CN111831755A (zh) * | 2020-07-23 | 2020-10-27 | 北京思特奇信息技术股份有限公司 | 一种跨数据库数据同步方法、系统、介质及设备 |
CN113254456A (zh) * | 2021-06-29 | 2021-08-13 | 山东浪潮通软信息科技有限公司 | 一种数据库的数据信息对比方法、系统、设备及存储介质 |
CN113760910A (zh) * | 2021-08-31 | 2021-12-07 | 中国银联股份有限公司 | 一种数据同步的方法及装置 |
CN114925068A (zh) * | 2022-05-23 | 2022-08-19 | 佳缘科技股份有限公司 | 自动修改数据库集群中表结构的方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103309997A (zh) * | 2013-06-25 | 2013-09-18 | 上海航天测控通信研究所 | 一种数据库合并的内外网并行运行系统及其数据库合并方法 |
CN103810257A (zh) * | 2014-01-24 | 2014-05-21 | 华为技术有限公司 | 一种升级软件数据库的方法、装置及设备 |
CN104798070A (zh) * | 2012-09-28 | 2015-07-22 | 甲骨文国际公司 | 活动跟踪、数据分类和数据库内归档的技术 |
CN104965735A (zh) * | 2015-06-18 | 2015-10-07 | 北京京东尚科信息技术有限公司 | 用于生成升级sql脚本的装置 |
US20160147859A1 (en) * | 2014-11-25 | 2016-05-26 | Juchang Lee | Transactional and Parallel Log Replay for Asynchronous Table Replication |
-
2017
- 2017-03-14 CN CN201710149902.5A patent/CN108572996B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104798070A (zh) * | 2012-09-28 | 2015-07-22 | 甲骨文国际公司 | 活动跟踪、数据分类和数据库内归档的技术 |
CN103309997A (zh) * | 2013-06-25 | 2013-09-18 | 上海航天测控通信研究所 | 一种数据库合并的内外网并行运行系统及其数据库合并方法 |
CN103810257A (zh) * | 2014-01-24 | 2014-05-21 | 华为技术有限公司 | 一种升级软件数据库的方法、装置及设备 |
US20160147859A1 (en) * | 2014-11-25 | 2016-05-26 | Juchang Lee | Transactional and Parallel Log Replay for Asynchronous Table Replication |
CN104965735A (zh) * | 2015-06-18 | 2015-10-07 | 北京京东尚科信息技术有限公司 | 用于生成升级sql脚本的装置 |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109284297A (zh) * | 2018-10-29 | 2019-01-29 | 中译语通科技股份有限公司 | 一种数据库智能更新方法及系统 |
CN111198902A (zh) * | 2018-11-16 | 2020-05-26 | 长鑫存储技术有限公司 | 元数据管理方法、装置、存储介质及电子设备 |
CN111198902B (zh) * | 2018-11-16 | 2023-06-16 | 长鑫存储技术有限公司 | 元数据管理方法、装置、存储介质及电子设备 |
CN109828889A (zh) * | 2019-01-31 | 2019-05-31 | 平安科技(深圳)有限公司 | 监控数据库的方法、装置、计算机设备和存储介质 |
CN109885581A (zh) * | 2019-03-14 | 2019-06-14 | 苏州达家迎信息技术有限公司 | 数据库的同步方法、装置、设备及存储介质 |
CN109885581B (zh) * | 2019-03-14 | 2021-09-17 | 苏州达家迎信息技术有限公司 | 数据库的同步方法、装置、设备及存储介质 |
CN110287182A (zh) * | 2019-05-05 | 2019-09-27 | 浙江吉利控股集团有限公司 | 一种大数据的数据对比方法、装置、设备及终端 |
CN110286883B (zh) * | 2019-06-03 | 2024-01-30 | 中国建设银行股份有限公司 | 智能数据库编码监控方法、装置及电子设备 |
CN110286883A (zh) * | 2019-06-03 | 2019-09-27 | 中国建设银行股份有限公司 | 智能数据库编码监控方法、装置及电子设备 |
CN110543476A (zh) * | 2019-07-03 | 2019-12-06 | 威富通科技有限公司 | 一种数据库表结构的同步方法、装置及服务器 |
CN111159020A (zh) * | 2019-12-20 | 2020-05-15 | 武汉达梦数据库有限公司 | 一种应用于同步软件测试的方法和装置 |
CN111104409A (zh) * | 2019-12-25 | 2020-05-05 | 上海米哈游天命科技有限公司 | 一种数据库处理方法、装置、存储介质及电子设备 |
CN111431984A (zh) * | 2020-03-02 | 2020-07-17 | 畅捷通信息技术股份有限公司 | 应用数据的同步方法、同步装置和计算机可读存储介质 |
CN111431984B (zh) * | 2020-03-02 | 2023-04-07 | 畅捷通信息技术股份有限公司 | 应用数据的同步方法、同步装置和计算机可读存储介质 |
CN111459916A (zh) * | 2020-04-16 | 2020-07-28 | 中国银行股份有限公司 | Gbase和oracle数据库表比对的方法及系统 |
CN111831755B (zh) * | 2020-07-23 | 2024-01-16 | 北京思特奇信息技术股份有限公司 | 一种跨数据库数据同步方法、系统、介质及设备 |
CN111831755A (zh) * | 2020-07-23 | 2020-10-27 | 北京思特奇信息技术股份有限公司 | 一种跨数据库数据同步方法、系统、介质及设备 |
CN113254456A (zh) * | 2021-06-29 | 2021-08-13 | 山东浪潮通软信息科技有限公司 | 一种数据库的数据信息对比方法、系统、设备及存储介质 |
CN113760910A (zh) * | 2021-08-31 | 2021-12-07 | 中国银联股份有限公司 | 一种数据同步的方法及装置 |
CN114925068A (zh) * | 2022-05-23 | 2022-08-19 | 佳缘科技股份有限公司 | 自动修改数据库集群中表结构的方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108572996B (zh) | 2021-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108572996B (zh) | 数据库表结构的同步方法、装置、电子设备和存储介质 | |
CN107506451B (zh) | 用于数据交互的异常信息监控方法及装置 | |
US9817858B2 (en) | Generating hash values | |
US8065323B2 (en) | Offline validation of data in a database system for foreign key constraints | |
US8219575B2 (en) | Method and system for specifying, preparing and using parameterized database queries | |
CN103168300B (zh) | 具有外连接的立即实体化视图的增量维护 | |
US20180081956A1 (en) | Method for automatically synchronizing multi-source heterogeneous data resources | |
US8924373B2 (en) | Query plans with parameter markers in place of object identifiers | |
KR101013810B1 (ko) | 엑셀기반 db테이블 갱신 시스템 및 방법 | |
CN113505128B (zh) | 创建数据表的方法、装置、设备及存储介质 | |
US20180314625A1 (en) | Method and design for automated testing system | |
US11216474B2 (en) | Statistical processing of natural language queries of data sets | |
US10089334B2 (en) | Grouping of database objects | |
WO2024001493A1 (zh) | 一种可视化的数据分析方法及设备 | |
CN109376153B (zh) | 一种基于NiFi的数据写入图数据库的系统及方法 | |
CN110597891B (zh) | MySQL聚合为PostgreSQL数据库的设备、系统、方法、存储介质 | |
US11144562B1 (en) | Method and apparatus of indicator information determination | |
US11442930B2 (en) | Method, apparatus, device and storage medium for data aggregation | |
US20240346010A1 (en) | Data processing method, distributed database system, electronic device and storage medium | |
CN112861182A (zh) | 数据库的查询方法、系统及计算机设备、存储介质 | |
CN118467644A (zh) | SQL Server数据库事务日志分析DDL操作方法、装置、设备及介质 | |
CN115203217A (zh) | 数据同步方法、装置、设备及计算机可读存储介质 | |
CN106980617B (zh) | 一种基于json语句操作数据库的方法和系统 | |
WO2023103432A1 (zh) | 代码文件编辑方法、装置、电子设备以及存储介质 | |
US10534761B2 (en) | Significant cleanse change information |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |