一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据库的约束关系检查方法及装置与流程

2022-05-06 10:41:51 来源:中国专利 TAG:


1.本说明书一个或多个实施例涉及数据库领域,尤其涉及一种数据库的约束关系检查方法及装置。


背景技术:

2.一般的关系数据库都提供一系列的约束定义,用来限制数据库中的数据的完整性。为保证约束不被破坏,在针对数据库执行增删改操作后,通常需要对该增删改操作后的数据记录进行约束关系检查。
3.传统技术中,在进行约束关系检查时,通常会对相关数据记录加锁。比如,外键约束,当在子表中增加一行数据记录时,需要对父表对应的数据记录乃至整个表加共享锁,以免父表被修改或删除,从而确保约束关系检查的有效性,但加锁通常会导致数据库的性能受到影响。


技术实现要素:

4.本说明书一个或多个实施例描述了一种数据库的约束关系检查方法及装置,可以在不影响数据库性能的情况下,检查数据库的约束关系。
5.第一方面,提供了一种数据库的约束关系检查方法,包括:针对数据库中的目标数据表,执行第一事务的dml操作;所述数据库中各数据表中存储的各数据记录具有事务版本号;进入提交阶段,并在所述提交阶段,对于经所述dml操作后的目标数据记录,确定对应的当前事务版本号;基于所述当前事务版本号,从所述目标数据表或其关联数据表中,读取所述第一事务可见的、最新的各相关数据记录;其中,所述目标数据记录与所述各相关数据记录的对应于目标字段的字段值存在相互限制关系;基于所述各相关数据记录,对所述目标数据记录的对应于目标字段的目标字段值进行约束关系检查;若所述约束关系检查通过,则提交所述第一事务,否则回滚。
6.第二方面,提供了一种数据库的约束关系检查装置,包括:执行单元,用于针对数据库中的目标数据表,执行第一事务的dml操作;所述数据库中各数据表中存储的各数据记录具有事务版本号;确定单元,用于进入提交阶段,并在所述提交阶段,对于经所述dml操作后的目标数据记录,确定对应的当前事务版本号;读取单元,用于基于所述当前事务版本号,从所述目标数据表或其关联数据表中,读取所述第一事务可见的、最新的各相关数据记录;其中,所述目标数据记录与所述各相关数据记录的对应于目标字段的字段值存在相互限制关系;检查单元,用于基于所述各相关数据记录,对所述目标数据记录的对应于目标字
段的目标字段值进行约束关系检查;处理单元,用于若所述约束关系检查通过,则提交所述第一事务,否则回滚。
7.第三方面,提供了一种计算机存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行第一方面的方法。
8.第四方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面的方法。
9.本说明书一个或多个实施例提供的数据库的约束关系检查方法及装置,数据库中的各数据记录具有事务版本号,该事务版本号的大小指示出操作对应数据记录的事务的提交先后顺序。在针对数据库执行dml操作后,基于当前确定的事务版本号,选取当前事务可见的、最新的相关数据记录进行约束关系检查,由此,使得本方案可以在不对相关数据记录加锁的情况下,也能确保约束关系检测的有效性,进而可以避免数据库的性能受到影响的问题。
附图说明
10.为了更清楚地说明本说明书实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
11.图1示出数据记录的链式存储结构示意图;图2示出根据一个实施例的数据库的约束关系检查方法流程图;图3a示出目标数据表示意图;图3b示出新增的目标数据记录示意图;图3c示出修改后的目标数据记录示意图;图3d示出目标数据表的母表示意图;图4a示出目标字段值的匹配过程示意图之一;图4b示出目标字段值的匹配过程示意图之二;图4c示出目标字段值的匹配过程示意图之三;图5示出根据一个实施例的数据库的约束关系检查装置示意图。
具体实施方式
12.下面结合附图,对本说明书提供的方案进行描述。
13.如前所述,在传统技术中,在针对数据库进行约束关系检查时,通常需要对相关数据记录加锁,以确保约束关系检测的有效性,这会影响数据库的性能。
14.为了不影响数据库的性能,本技术的发明人提出,针对数据库中的数据记录,添加对应的事务版本号。具体地,在开启一个事务增加或修改一行数据记录时,针对新增的数据记录或者修改后的数据记录,确定对应的事务版本号,并将该事务版本号添加到其中。之后将添加事务版本号后的新增的(或修改后的)数据记录存储到数据库中。该事务版本号的大小指示出操作(包括增加或修改)对应数据记录的事务的提交先后顺序。之后,在进行约束关系检查时,基于当前的事务版本号来读取当前事务可见的相关数据记录,由此,可以在不
影响数据库性能的情况下,确定数据库的约束关系检查的有效性。
15.需要说明,上述在将修改后的数据记录存储到数据库中时,该修改后的数据记录并不会覆盖修改前的数据记录,而是同时保留修改前和修改后的数据记录。也就是说,针对同一行数据记录,可能会存在多个版本,该多个版本分别对应于该数据记录的多次修改,且最新的数据记录具有最大的事务版本号,最旧的数据记录具有最小的事务版本号。
16.上述同一行数据记录的多个版本可以通过链式进行存储。在一个示例中,数据记录的链式存储结构可以如图1所示。图1中,最下方(也称链尾)为最旧的数据记录,其对应的事务版本号为1。最上方(也称链首)为最新的数据记录,其对应的事务版本号为3。
17.其应理解,在针对同一数据记录存储多个版本的情况下,若某一事务想要读取一行正在被修改的数据记录,那么可以读取对应的旧版本,由此可以避免在数据库的约束关系检查过程中对相关数据记录加锁的问题,此外由于该旧版本不会被修改,从而确保了约束关系检查的正确性。
18.以图1为例来说,假设某一事务想要读取该id=1的数据记录,且某事务正在修改该数据记录,那么可以读取链式存储结构中最上方的数据记录。
19.也就是说,本方案中,通过为数据记录添加对应的事务版本号,可以解决需要对数据记录加锁而影响数据库性能的问题。需要说明,由于正在被修改的数据记录,其还没提交成功,因此在事务读被修改数据记录的那一刻,有效的数据记录就是上一个版本的数据记录,从而本方案读旧版本的构思是正确的。
20.另外,上述约束关系可以包括但限于非空约束(not null constraint)、列检查约束(check constraint)、列引用约束(ref constraint)、唯一约束(unique constraint)、主键约束(primary key constraint)以及外键约束(primary key constraint)。其中,非空约束是指禁止字段值被修改为空。列检查约束是指要求写入数据库的字段值符合指定条件。列引用约束定义数据库中对象的应用关系。唯一约束是指禁止多行在同一列或多列组合中具有相同的字段值,但允许某些字段值为空。主键约束是指禁止多行在同一列或多列组合中具有相同的字段值,并禁止字段值为空。外键约束是指要求一个表中的字段值与另一个表中的字段值匹配。
21.需要说明,上述前3种约束关系的检查只涉及当前行,主键约束和唯一约束的检查涉及当前表中的所有行,外键约束涉及当前行以及母表或者子表中的所有行。本说明书将针对后3种约束关系的检查进行详细说明。
22.图2示出根据一个实施例的数据库的约束关系检查方法流程图。可以理解,该方法可以通过任何具有计算、处理能力的装置、设备、平台、设备集群来执行。如图2所示,该方法至少包括以下步骤。
23.步骤202,针对数据库中的目标数据表,执行第一事务的dml操作。
24.其中,数据库中各数据表中存储的各数据记录具有事务版本号。
25.上述目标数据表至少包括设置了约束关系的目标字段。此外,上述dml操作可以包括以下中的一种:增加操作、修改操作以及删除操作。
26.在一个示例中,上述目标数据表可以如图3a所示。图3a中,目标数据表s可以包括如下5个字段:“员工编号”、“职业”、“爱好”、“部门”和“事务版本号”,其中,“员工编号”设置有约束关系。
27.应理解,图3a只是一种示例性说明,在实际应用中,目标数据表s还可以包括其它字段,且数据记录也可以多于3行。
28.图3a中,员工编号的约束关系具有对应的检查时机,该检查时机可以为立即检查(immediate),也可以为延迟检查(deferred)。
29.在检查时机为立即检查的情况下,则在进入提交阶段之前,立即对经上述dml操作后的目标数据记录的对应于目标字段的目标字段值进行约束关系检查。比如,对上述“员工编号”的目标字段值进行约束检查。具体检查方法可以参照进入提交阶段后目标字段值的约束检查,本说明书在此不复赘述。
30.应理解,若上述约束关系检查通过,则进入第一事务的提交阶段,否则直接回滚。
31.步骤204,进入提交阶段,并在该提交阶段,对于经dml操作后的目标数据记录,确定对应的当前事务版本号。
32.本说明书所述的事务版本号的大小可以指示出操作对应数据记录的事务的提交先后顺序。在一个示例中,可以将第一事务的全局有序的事务id确定为当前事务版本号。
33.以dml操作为增加操作为例来说,新增的目标数据记录可以如图3b所示。再以dml操作为修改操作为例来说,修改后的目标数据记录可以如图3c所。图3c中,该目标数据记录对应于图3a中的第2行数据记录。
34.在一个例子中,假设第一事务的事务id为2,那么上述新增的目标数据记录或者修改后的目标数据记录的当前事务版本号可以为:“2”。
35.需要说明,图3b和图3c示出的目标数据记录只是一种临时数据,其要么还没有写入数据区,要么已经写入数据区,但需要带上特殊标记,以便第一事务在执行读操作时忽略该数据记录。应理解,在第一事务提交后,上述临时数据才会被真正写入到数据区中。
36.可选地,在确定当前事务版本号之后,可以判断目标数据表是否包括设置有约束关系的字段,若包括,则执行步骤206,否则直接提交第一事务。
37.步骤206,基于当前事务版本号,从目标数据表或其关联数据表中,读取第一事务可见的、最新的各相关数据记录。
38.其中,目标数据记录与各相关数据记录的对应于目标字段的字段值存在相互限制关系。
39.在目标字段的约束关系为唯一约束或主键约束的情况下,上述读取第一事务可见的、最新的各相关数据记录,包括:从目标数据表中,读取对应事务版本号小于等于当前事务版本号的、最新的各数据记录作为各相关数据记录。
40.以图3b和图3c示出的经dml操作后的目标数据记录为例来说,可以将图3a示出的3行数据记录均作为相关数据记录。
41.需要说明,针对删除操作不需要做唯一约束和主键约束检查。也就是说,在目标字段的约束关系为唯一约束或主键约束,且第一事务的dml操作为删除操作时,直接提交第一事务。
42.在目标字段的约束关系为外键约束的情况下,上述读取第一事务可见的、最新的各相关数据记录,包括:从目标数据表的关联数据表中,读取对应事务版本号小于等于当前事务版本号
的、最新的各数据记录作为各相关数据记录。
43.其中,若第一事务的dml操作为删除操作,则上述关联数据表为目标数据表的子表;若第一事务的dml操作为增加操作或修改操作,则上述关联数据表为目标数据表的母表。
44.需要说明,上述子表和母表均是相对于目标字段而言的。其中,子表是指将目标字段作为外键的数据表,而该目标字段为目标数据表的主键。母表是指将目标字段作为主键的数据表,而该目标字段为目标数据表的外键。
45.通常情况下,在目标数据表为子表的情况下,针对删除操作不需要做外键约束检查。在目标数据表为母表的情况下,针对增加操作或修改操作不需要做外键约束检查。
46.在一个示例中,目标数据表的母表可以如图3d所示。图3d中,“员工编号”为主键。
47.以图3b和图3c示出的经dml操作后的目标数据记录为例来说,可以将图3d示出的4行数据记录均作为相关数据记录。
48.以下对基于当前事务版本号,读取第一事务可见的相关数据记录的正确性进行说明。
49.如前所述,本说明书所述的事务版本号的大小,用于指示出操作对应数据记录的事务的提交先后顺序。具体而言,事务提交的越早,其对应的事务版本号越小;事务提交的越晚,其对应的事务版本号越大。
50.应理解,在作出如上定义的情况下,对应事务版本号小于等于当前事务版本号的数据记录,即为先于第一事务提交的事务操作的数据记录,其对第一事务是可见的。因此可以通过读取对应事务版本号小于等于当前事务版本号的数据记录,作为第一事务可见的数据记录。
51.此外,如前所述,针对同一行数据记录,可能会存在多个版本,本方案将读取最新的相关数据记录针对目标字段值进行约束关系检查。比如,对于某一相关数据记录,在该相关数据记录具有多个版本,且多个版本的相关数据记录以链式结构存储时,可以读取链首的相关数据记录针对目标字段值进行约束关系检查。
52.步骤208,基于各相关数据记录,对目标数据记录的对应于目标字段的目标字段值进行约束关系检查。
53.其中,在目标字段的约束关系为唯一约束或主键约束的情况下,上述对目标数据记录的对应于目标字段的目标字段值进行约束关系检查,包括:将目标字段值与目标数据表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若均匹配不成功,则约束关系检查通过,否则不通过。
54.以图3b示出的新增的目标数据记录为例来说,可以将该目标数据记录中的“员工编号”,分别与图3a示出的3行数据记录中的“员工编号”进行一一匹配。具体的匹配过程可以如图4a所示,图4a中,由于均匹配不成功,因此,约束关系检查通过。
55.再以图3c示出的修改的目标数据记录为例来说,可以将该目标数据记录中的“员工编号”,分别与图3a示出的第1和第3行数据记录中的“员工编号”进行一一匹配。注意,由于目标数据记录是针对图3a中的第2行数据记录作出的修改,因此无需与该行数据记录进行比对。具体的匹配过程可以如图4b所示,图4b中,由于均匹配不成功,因此,约束关系检查通过。
56.此外,在约束关系为外键约束的情况下,上述对目标数据记录的对应于目标字段的目标字段值进行约束关系检查,包括:若第一事务的dml操作为删除操作,则将目标字段值与目标数据表的子表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若均匹配不成功,则约束关系检查通过,否则不通过。
57.应理解,上述字段值的匹配过程即为判断目标字段值在子表中是否存在引用,如果存在引用,则针对目标字段值的约束关系检查不通过。
58.若第一事务的dml操作为增加操作或修改操作,则将目标字段值与目标数据表的母表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若与任一字段值匹配成功,则约束关系检查通过,否则不通过。
59.以图3b示出的新增的目标数据记录,图3d示出的母表为例来说,可以将该目标数据记录中的“员工编号”,分别与图3d示出的4行数据记录中的“员工编号”进行一一匹配。具体的匹配过程可以如图4c所示,图4c中,由于与第2行的“员工编号”匹配成功,因此,约束关系检查通过。
60.步骤210,若约束关系检查通过,则提交第一事务,否则回滚。
61.应理解,在第一事务提交成功后,目标数据记录可以被存储到数据库的目标数据表中。具体地,可以将当前事务版本号添加到目标数据记录中,得到更新的目标数据记录。将更新的目标数据记录存储到目标数据表中。
62.综上,本说明书实施例提供的数据库的约束关系检查方法,数据库中的各数据记录具有事务版本号,该事务版本号的大小指示出操作对应数据记录的事务的提交先后顺序。在针对数据库执行dml操作后,基于当前确定的事务版本号,选取当前事务可见的、最新的相关数据记录进行约束关系检查,由此,使得本方案可以在不对相关数据记录加锁的情况下,也能确保约束关系检测的有效性,由此可以避免数据库性能受到影响的问题。
63.与上述数据库的约束关系检查方法对应地,本说明书一个实施例还提供的一种数据库的约束关系检查装置,如图5所示,该装置可以包括:执行单元502,用于针对数据库中的目标数据表,执行第一事务的dml操作,该数据库中各数据表中存储的各数据记录具有事务版本号。
64.其中,上述dml操作包括以下中的一种:增加操作、修改操作以及删除操作。
65.确定单元504,用于进入提交阶段,并在该提交阶段,对于经dml操作后的目标数据记录,确定对应的当前事务版本号。
66.其中,确定单元504具体用于:将第一事务的全局有序的事务id确定为当前事务版本号。
67.读取单元506,用于基于当前事务版本号,从目标数据表或其关联数据表中,读取第一事务可见的、最新的各相关数据记录。其中,该目标数据记录与各相关数据记录的对应于目标字段的字段值存在相互限制关系。
68.其中,上述约束关系为唯一约束或主键约束;读取单元506具体用于:从目标数据表中,读取对应事务版本号小于等于当前事务版本号的、最新的各数据记录作为各相关数据记录。
69.其中,上述约束关系为外键约束;读取单元506具体用于:从目标数据表的关联数据表中,读取对应事务版本号小于等于当前事务版本号的、最新的各数据记录作为各相关数据记录。
70.其中,若第一事务的dml操作为删除操作,则上述关联数据表为目标数据表的子表。若第一事务的dml操作为增加操作或修改操作,则上述关联数据表为目标数据表的母表。
71.检查单元508,用于基于各相关数据记录,对目标数据记录的对应于目标字段的目标字段值进行约束关系检查。
72.其中,约束关系为唯一约束或主键约束;检查单元508具体用于:将目标字段值与目标数据表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若均匹配不成功,则约束关系检查通过,否则不通过。
73.其中,约束关系为外键约束;检查单元508具体用于:若第一事务的dml操作为删除操作,则将目标字段值与目标数据表的子表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若均匹配不成功,则约束关系检查通过,否则不通过;若第一事务的dml操作为增加操作或修改操作,则将目标字段值与目标数据表的母表中的各相关数据记录的对应于目标字段的各字段值进行匹配,若与任一字段值匹配成功,则约束关系检查通过,否则不通过。
74.处理单元510,用于若约束关系检查通过,则提交第一事务,否则回滚。
75.可选地,上述装置还可以包括:添加单元512,用于若约束关系检查通过,则将当前事务版本号添加到目标数据记录中,得到更新的目标数据记录;存储单元514,用于将更新的目标数据记录存储到目标数据表中。
76.可选地,在约束关系的检查时机为立即检查的情况下,检查单元508,还用于在进入提交阶段之前,立即对目标数据记录的对应于目标字段的目标字段值进行约束关系检查。
77.本说明书上述实施例装置的各功能模块的功能,可以通过上述方法实施例的各步骤来实现,因此,本说明书一个实施例提供的装置的具体工作过程,在此不复赘述。
78.本说明书一个实施例提供的数据库的约束关系检查装置,可以在不影响数据库性能的情况下,检查数据库的约束关系。
79.根据另一方面的实施例,还提供一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序在计算机中执行时,令计算机执行结合图2所描述的方法。
80.根据再一方面的实施例,还提供一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现结合图2所述的方法。
81.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于设备实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
82.结合本说明书公开内容所描述的方法或者算法的步骤可以硬件的方式来实现,也可以是由处理器执行软件指令的方式来实现。软件指令可以由相应的软件模块组成,软件模块可以被存放于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动硬盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质耦合至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。另外,该asic可以位于服务器中。当然,处理器和存储介质也可以作为分立组件存在于服务器中。
83.本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是通用或专用计算机能够存取的任何可用介质。
84.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
85.以上所述的具体实施方式,对本说明书的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本说明书的具体实施方式而已,并不用于限定本说明书的保护范围,凡在本说明书的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本说明书的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献