CN112948400A - 一种数据库管理方法、数据库管理装置及终端设备 - Google Patents
一种数据库管理方法、数据库管理装置及终端设备 Download PDFInfo
- Publication number
- CN112948400A CN112948400A CN202010978019.9A CN202010978019A CN112948400A CN 112948400 A CN112948400 A CN 112948400A CN 202010978019 A CN202010978019 A CN 202010978019A CN 112948400 A CN112948400 A CN 112948400A
- Authority
- CN
- China
- Prior art keywords
- field
- database
- node
- statement
- data corresponding
- 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.)
- Pending
Links
- 238000007726 management method Methods 0.000 title claims abstract description 29
- 230000014509 gene expression Effects 0.000 claims abstract description 106
- 238000000034 method Methods 0.000 claims abstract description 25
- 238000004364 calculation method Methods 0.000 claims abstract description 12
- 238000004590 computer program Methods 0.000 claims description 21
- 230000006870 function Effects 0.000 claims description 17
- 238000004458 analytical method Methods 0.000 claims description 9
- 238000012795 verification Methods 0.000 claims description 4
- 238000011161 development Methods 0.000 abstract description 7
- 238000012545 processing Methods 0.000 abstract description 4
- 238000010586 diagram Methods 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 230000004044 response Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000001960 triggered effect Effects 0.000 description 2
- 210000004556 brain Anatomy 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/235—Update request formulation
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请适用于数据处理技术领域,提供了一种数据库管理方法、数据库管理装置、终端设备及计算机可读存储介质,所述方法包括:在对数据库中的第一字段对应的数据进行变更时,获取所述数据库中的第二字段对应的预设表达式,所述第二字段对应的数据根据所述第一字段对应的数据和所述预设表达式计算得到;根据所述预设表达式生成数据库操作语句,所述数据库操作语句用于更新所述第二字段对应的数据;执行所述数据库操作语句。通过上述方法,可以减少用于实现冗余字段的更新的代码量,提高开发效率。
Description
技术领域
本申请属于数据处理技术领域,尤其涉及一种数据库管理方法、数据库管理装置、终端设备及计算机可读存储介质。
背景技术
在数据库存储的众多字段中,有很多字段对应的数据是依赖其它字段对应的数据计算得到的,这种依赖于其它字段的字段被称为冗余字段。每当冗余字段所依赖的字段对应的数据发生变更时,该冗余字段对应的数据也需要相应地更新。
相关技术中,每个冗余字段的更新都需要写很多代码去实现,造成开发效率很低。
发明内容
有鉴于此,本申请提供了一种数据库管理方法、数据库管理装置、终端设备及计算机可读存储介质,可以减少用于实现冗余字段的更新的代码量,提高开发效率。
第一方面,本申请提供了一种数据库管理方法,包括:
在对数据库中的第一字段对应的数据进行变更时,获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到;
根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据;
执行上述数据库操作语句。
第二方面,本申请提供了一种数据库管理装置,包括:
表达式获取单元,用于在对数据库中的第一字段对应的数据进行变更时,获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到;
语句生成单元,用于根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据;
语句执行单元,用于执行上述数据库操作语句。
第三方面,本申请提供了一种终端设备,包括存储器、处理器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时实现如上述第一方面所提供的方法。
第四方面,本申请提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现如第一方面所提供的方法。
第五方面,本申请提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述第一方面所提供的方法。
由上可见,本申请方案中,在对数据库中的第一字段对应的数据进行变更时,首先获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到,然后根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据,最后执行上述数据库操作语句。本申请方案通过为数据库中的每个第二字段(即冗余字段)设置对应的预设表达式,在需要更新第二字段对应的数据时,只需根据该预设表达式生成并执行数据库操作语句,即可实现对第二字段对应的数据进行更新,此种方式无需在代码中计算第二字段对应的数据,可以减少用于实现冗余字段的更新的代码量,提高开发效率。并且,由于冗余字段的更新是通过一个数据库操作语句来执行,可以降低发生死锁的概率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的数据库管理方法的流程示意图;
图2是本申请实施例提供的抽象语法树的示例图;
图3是本申请实施例提供的数据库管理装置的结构框图;
图4是本申请实施例提供的终端设备的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。
应当理解,当在本申请说明书和所附权利要求书中使用时,术语“包括”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。
还应当理解,在本申请说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。
如在本申请说明书和所附权利要求书中所使用的那样,术语“如果”可以依据上下文被解释为“当...时”或“一旦”或“响应于确定”或“响应于检测到”。类似地,短语“如果确定”或“如果检测到[所描述条件或事件]”可以依据上下文被解释为意指“一旦确定”或“响应于确定”或“一旦检测到[所描述条件或事件]”或“响应于检测到[所描述条件或事件]”。
另外,在本申请说明书和所附权利要求书的描述中,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。
在本申请说明书中描述的参考“一个实施例”或“一些实施例”等意味着在本申请的一个或多个实施例中包括结合该实施例描述的特定特征、结构或特点。由此,在本说明书中的不同之处出现的语句“在一个实施例中”、“在一些实施例中”、“在其他一些实施例中”、“在另外一些实施例中”等不是必然都参考相同的实施例,而是意味着“一个或多个但不是所有的实施例”,除非是以其他方式另外特别强调。术语“包括”、“包含”、“具有”及它们的变形都意味着“包括但不限于”,除非是以其他方式另外特别强调。
图1示出了本申请实施例提供的一种数据库管理方法的流程图,详述如下:
步骤101,在对数据库中的第一字段对应的数据进行变更时,获取数据库中的第二字段对应的预设表达式;
在本申请实施例中,数据库中存储有第一字段和第二字段,第一字段和第二字段可以属于同一张数据表,也可以属于不同数据表,此处不作限定。例如,数据库中包括两张数据表,分别为数据表1和数据表2,第一字段属于数据表1,第二字段属于数据表2。其中,第二字段对应的数据依赖第一字段对应的数据计算得到,比如,第一字段对应的数据与第二字段对应的数据之间满足一种函数关系,当第一字段对应的数据发生变化时,第二字段对应的数据也相应地发生变化。如果数据库中任意一个字段对应的数据需要依赖其它字段对应的数据计算得到,则可以将依赖其它字段的字段确定为第二字段,被第二字段依赖的字段确定为第一字段。需要注意的是,一个第二字段对应的数据可能只依赖一个字段对应的数据计算得到,也可能同时依赖两个以上字段对应的数据计算得到,当第二字段同时依赖两个以上字段对应的数据计算得到时,可以将该两个以上字段均确定为第一字段。
具体地,用户可以为第二字段配置对应的预设表达式,该预设表达式体现了第二字段与第一字段之间的依赖关系。第二字段对应的数据可以根据第一字段对应的数据和第二字段对应的预设表达式计算得到。例如,第二字段为支付金额Amount,第一字段为商品价格Price,设折扣为0.8,则第二字段对应的预设表达式为Amount=0.8*Price。在对数据库中的第一字段对应的数据进行变更时,即会触发获取预设表达式的操作。还是以上述举例来说明,假设商品价格Price对应的数据为100,支付金额Amount对应的数据为100×0.8=80,在将商品价格Price对应的数据变更为120时,则会触发获取预设表达式Amount=0.8*Price的操作。其中,编写预设表达式的语言可以是接近自然语言的领域特定语言,即使是非专业程序人员也可以根据需求自行编写预设表达式,从而节省了开发人员的人力成本。
可选地,在上述步骤101之前还包括:
在对数据库中的任一字段对应的数据进行变更时,判断字段是否为第一字段;
若字段不为第一字段,则提交目标事务。
在本申请实施例中,数据库中存储的所有字段中包括第一字段和非第一字段,非第一字段即不为第一字段的字段。为了保证数据库的正常运行,可以在对数据库中的任一字段对应的数据进行变更时,判断字段是否为第一字段,如果该字段不为第一字段,则表明不存在依赖该字段的第二字段,此时,可以直接提交目标事务,从而完成对该字段的变更。其中,目标事务为包含用于对该字段对应的数据进行变更的数据库操作语句的事务。需要说明的是,本申请实施例中的目标事务中还包含一些用于控制目标事务执行状态的控制语句,例如事务开始语句、事务提交语句及事务回滚语句等。这些语句实际上是由数据库语言编写的语句。根据数据库语言的不同,这些语句可以是不同语言编写的语句,例如,若采用结构化查询语言(Structured Query Language,SQL),则目标事务中包含的数据库操作语句和控制语句可以是一系列SQL语句。
步骤102,根据预设表达式生成数据库操作语句;
在本申请实施例中,预设表达式只是人类大脑可以理解的表达式文本,终端设备无法直接执行该预设表达式。因此,可以将预设表达式转换成为可执行的数据库操作语句。其中,数据库操作语句可以是任意可对数据库进行操作的语句,例如,数据库操作语句可以是SQL语句,也可以是Lamda语句,此处不对数据库操作语句的类型作限定。具体地,生成的数据库操作语句可用于更新第二字段对应的数据。
可选地,上述步骤102可以具体包括:
A1、对预设表达式进行语法解析,生成抽象语法树;
A2、根据抽象语法树生成数据库操作语句。
在本申请实施例中,预设表达式可以是任何由操作数、函数和运算符构成的表达式,操作数可以是变量或常量,运算符可以包括但不限于基本算数运算符(如+,-,*,/等)、逻辑运算符(如AND,OR,NOT等)和比较运算符(如>,<,=等),函数可以包括字符类函数(如SUBSTRING、TRIM等)和数组类函数(如MAX、SUM等)。对于预设表达式Amount=0.8*Price来说,其由常量0.8、运算符*和变量Price构成。
获取预设表达式后,可以对预设表达式进行语法解析,然后根据语法解析结果生成抽象语法树,比如可以通过Irony开源组件对预设表达式进行语法解析,生成抽象语法树。生成的抽象语法树包括至少一个节点,其中每个节点表征预设表达式中的一个操作数、预设表达式中的一个函数或预设表达式中的一个运算符。举例来说,对预设表达式Discount*Price*Count进行语法解析,生成的抽象语法树如图2所示。其中,预设表达式中从左到右的第一个*作为抽象语法树的根节点,根节点的左叶子节点为Discount,根节点的右叶子节点为预设表达式中从左到右的第二个*,根节点的右叶子节点的左叶子节点为Price,根节点的右叶子节点的右叶子节点为Count。抽象语法树以二叉树的形式表示了预设表达式,根据该抽象语法树,即可生成数据库操作语句。
可选地,数据库操作语句可以为SQL语句,基于此,上述步骤A2可以具体包括:
A21、遍历抽象语法树,基于预设的语法规则解析得到抽象语法树中每个节点的节点类型;
A22、根据各个节点的节点类型,生成SQL语句。
在本申请实施例中,语法规则可以由用户根据需求进行配置。语法规则可以包括变量类型、运算符和函数等内容以及这些内容的表示方式(如中文、英文和符号等)。变量类型包括数值型、字符型、布尔型和日期型等,运算符可以包括但不限于基本算数运算符(如+,-,*,/等)、逻辑运算符(如AND,OR,NOT等)和比较运算符(如>,<,=等),函数可以包括字符类函数(如SUBSTRING、TRIM等)和数组类函数(如MAX、SUM等)。基于语法规则,可以遍历抽象语法树中的每个节点,解析每个节点的节点类型。例如,抽象语法树中的某个节点为*,则可以解析得到该节点的节点类型为二元操作符。在解析得到抽象语法树中各个节点的节点类型后,即可根据各个节点的节点类型,生成SQL语句。其中,生成的该SQL语句可用于更新第二字段对应的数据。
为了保证生成的SQL语句的正确性,在上述步骤A22之前还可以包括:
对各个节点的节点类型进行校验;
相应地,上述步骤A22可以具体包括:
若各个节点的节点类型均通过校验,则根据各个节点的节点类型,生成SQL语句。
在本申请实施例中,在生成SQL语句之前,还可以对各个节点的节点类型进行校验。具体可以根据数学运算法则对节点类型进行校验,例如,如果抽象语法树中某个节点的节点类型为二元操作符,则该节点的左叶子节点应该为常量或变量,右叶子节点的节点类型也应该为常量或变量。在对各个节点的节点类型进行校验后,如果各个节点的节点类型均校验通过,则可以根据各个节点的节点类型生成SQL语句。如果有至少一个节点的节点类型未校验通过,则可以输出错误信息,该错误信息用于指示预设表达式不正确,从而提醒用户重新配置预设表达式。
可选地,上述步骤A22可以具体包括:
针对抽象语法树中的每个节点,根据节点的节点类型,生成节点对应的第一SQL片段;
根据抽象语法树中各个节点之间的连接关系,将各个第一SQL片段组合为第二SQL片段;
根据预设的update语句模板和第二SQL片段,生成SQL语句。
在本申请实施例中,针对抽象语法树中的每个节点,可以根据该节点的节点类型,生成该节点对应的第一SQL片段。抽象语法树中的各个节点之间的连接关系体现了各个节点之间的逻辑关系,因此,可以根据各个节点之间的逻辑关系将各个节点对应的第一SQL片段组合为第二SQL片段。该第二SQL片段中可以构造一个select语句,以保证第二SQL片段是可执行的,即通过该第二SQL片段可以从数据库中查询数据。例如,针对图2所示的抽象语法树中的根节点*,生成对应的第一SQL片段为(待填入元素1)*(待填入元素2);针对节点Discount,生成对应的第一SQL片段为Discount;针对叶子节点*,生成对应的SQL片段为(待填入元素3)*(待填入元素4);针对节点Price,生成对应的第一SQL片段为Price;针对节点Count,生成对应的第一SQL片段为Count;根据抽象语法树中各个节点之间的连接关系,可以分析得到待填入元素3应该是第一SQL片段Price,待填入元素4应该是第一SQL片段Count,待填入元素1应该是第一SQL片段Discount,待填入元素2应该是Price*Count。假设Discount是常量,Price和Count均是变量,则组合得到的第二SQL片段可以是(Discount)*(SELECT OrderEntry.Price*OrderEntry.Count FROM OrderEntry),其中,OrderEntry为字段Price和字段Count所属的数据表的表名。
获得第二SQL片段后,可以将第二SQL片段填入预设的update语句模板中,从而生成SQL语句,其中,该SQL语句为update语句,可以用于更新第二字段对应的数据。
举例来说,数据库中包括订单表Order和订单明细表OrderEntry。
订单表Order
OrderGUID | Discount | Amount |
8E68EA2E | 0.3 | 1500 |
订单明细表OrderEntry
OrderGUID | GoodsGUID | Price | Count |
8E68EA2E | 87602936 | 1000 | 2 |
8E68EA2E | 6A602936 | 1000 | 3 |
其中,订单的金额Amount=订单的折扣Discount*Sum(商品的单价Price*商品的数量Count*商品的数量对应的折扣)。因此,用户可以配置第二字段Amount对应的预设表达式为Amount=Discount*Sum(OrderEntry.Price*OrderEntry.Count*CASEWHEN(OrderEntry.Count>30,0.98,1))。根据该预设表达式,可以生成第二SQL片段:
((Discount)*(SELECT SUM(((((OrderEntry.Price)*(OrderEntry.Count)))*(CASE WHEN(OrderEntry.Count)>(30)THEN 0.98ELSE 1END)))FROM OrderEntry WHERE OrderEntry.OrderGUID=@RefGUID))
其中,@RefGUID为订单明细表OrderEntry的外键OrderGUID。预设的update语句模板可以是UPDATE Order SET Amount=[待填入元素]WHERE OrderGUID=@RefGUID。具体地,可以将生成的第二SQL片段作为update语句模板中的待填入元素,从而生成SQL语句。由于对第二字段Amount的更新操作全部由一条SQL语句来完成的,因此,可以降低对数据库进行操作时发生死锁的可能性。
可选地,数据库操作语句也可以为Lamda表达式,基于此,上述步骤A2可以具体包括:
遍历抽象语法树,基于预设的语法规则解析得到抽象语法树中每个节点的节点类型;
根据各个节点的节点类型,生成Lamda表达式。
在本申请实施例中,在解析得到抽象语法树中各个节点的节点类型后,即可根据各个节点的节点类型,生成Lamda表达式。其中,生成的该Lamda表达式可用于更新第二字段对应的数据。
步骤103,执行数据库操作语句。
在本申请实施例中,数据库操作语句可以是SQL语句,也可以是Lamda表达式,此处不作限定。通过执行该数据库操作语句,即可更新第二字段对应的数据。示例的,可以将数据库操作语句添加到目标事务中,该目标事务即为包含用于对第一字段对应的数据进行变更的数据库操作语句的事务。比如目标事务包含如下语句:
Start transaction;
用于对第一字段对应的数据进行变更的数据库操作语句;
Commit;
添加用于更新第二字段对应的数据的数据库操作语句后,目标事务包含如下语句:
Start transaction;
用于对第一字段对应的数据进行变更的数据库操作语句;
用于更新第二字段对应的数据的数据库操作语句;
Commit;
如此,使得对第一字段的操作和对第二字段的操作同属于一个事务中,对第一字段的操作和对第二字段操作要么全部成功,要么全部失败,从而保证了数据库中存储的数据的准确性。在执行完数据库操作语句后,可以将目标事务提交,从而完成对数据库中的第二字段对应的数据的更新。
可选地,在根据预设表达式生成数据库操作语句的同时,还可以根据预设表达式生成前端表达式,该前端表达式可以是JavaScript脚本中的表达式,例如预设表达式为A+B,则根据预设表达式生成的前端表达式可以是f.add(A,B)。根据该前端表达式,可以在第一字段对应的数据发生变更时,自动计算出第二字段对应的数据应该被更新为哪个值(记作目标值),然后将前端页面中显示的第二字段对应的数据更新为该目标值,从而完成前端页面与用户之间的交互,给用户带来更加良好的体验。需要注意的是,通过前端表达式只能更新前端页面中显示的第二字段对应的数据,无法更新数据库中存储的第二字段对应的数据。
由上可见,本申请方案中,在对数据库中的第一字段对应的数据进行变更时,首先获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到,然后根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据,最后执行上述数据库操作语句。本申请方案通过为数据库中的每个第二字段(即冗余字段)设置对应的预设表达式,在需要更新第二字段对应的数据时,只需根据该预设表达式生成并执行数据库操作语句,即可实现对第二字段对应的数据进行更新,此种方式无需在代码中计算第二字段对应的数据,可以减少用于实现冗余字段的更新的代码量,提高开发效率。并且,由于冗余字段的更新是通过一个数据库操作语句来执行,可以降低发生死锁的概率。
应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图3示出了本申请实施例提供的一种数据库管理装置的结构框图,为了便于说明,仅示出了与本申请实施例相关的部分。
该数据库管理装置300包括:
表达式获取单元301,用于在对数据库中的第一字段对应的数据进行变更时,获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到;
语句生成单元302,用于根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据;
语句执行单元303,用于执行上述数据库操作语句。
可选地,上述语句生成单元302,包括:
语法树生成子单元,用于对上述预设表达式进行语法解析,生成抽象语法树,上述抽象语法树包括至少一个节点,每个节点用于表征上述预设表达式中的一个操作数、上述预设表达式中的一个函数或上述预设表达式中的一个运算符;
操作语句生成子单元,用于根据上述抽象语法树生成上述数据库操作语句。
可选地,上述数据库操作语句为SQL语句,上述操作语句生成子单元,包括:
节点类型解析子单元,用于遍历上述抽象语法树,基于预设的语法规则解析得到上述抽象语法树中每个节点的节点类型;
SQL语句生成子单元,用于根据各个节点的节点类型,生成上述SQL语句。
可选地,上述SQL语句生成子单元,包括:
第一SQL片段生成子单元,用于针对上述抽象语法树中的每个节点,根据上述节点的节点类型,生成上述节点对应的第一SQL片段;
第二SQL片段生成子单元,用于根据上述抽象语法树中各个节点之间的连接关系,将各个第一SQL片段组合为第二SQL片段,上述第二SQL片段包括select语句;
模板SQL语句生成子单元,用于根据预设的update语句模板和上述第二SQL片段,生成上述SQL语句。
可选地,上述数据库管理装置300,还包括:
校验单元,用于对各个节点的节点类型进行校验。
相应地,上述SQL语句生成子单元,具体用于若上述各个节点的节点类型均通过校验,则根据各个节点的节点类型,生成上述SQL语句。
可选地,上述语句执行单元303,包括:
语句添加子单元,用于将上述数据库操作语句添加到目标事务中,上述目标事务为包含用于对上述第一字段对应的数据进行变更的数据库操作语句的事务;
语句执行子单元,用于执行上述数据库操作语句;
事务提交子单元,用于在执行上述数据库操作语句后,提交上述目标事务。
可选地,上述数据库管理装置300,还包括:
字段判断单元,用于在对数据库中的任一字段对应的数据进行变更时,判断上述字段是否为上述第一字段;
事务提交单元,用于若上述字段不为上述第一字段,则提交目标事务,上述目标事务为包含用于对上述字段对应的数据进行变更的数据库操作语句的事务。
由上可见,本申请方案中,在对数据库中的第一字段对应的数据进行变更时,首先获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到,然后根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据,最后执行上述数据库操作语句。本申请方案通过为数据库中的每个第二字段(即冗余字段)设置对应的预设表达式,在需要更新第二字段对应的数据时,只需根据该预设表达式生成并执行数据库操作语句,即可实现对第二字段对应的数据进行更新,此种方式无需在代码中计算第二字段对应的数据,可以减少用于实现冗余字段的更新的代码量,提高开发效率。并且,由于冗余字段的更新是通过一个数据库操作语句来执行,可以降低发生死锁的概率。
图4为本申请一实施例提供的终端设备的结构示意图。如图4所示,该实施例的终端设备4包括:至少一个处理器40(图4中仅示出一个)、存储器41以及存储在上述存储器41中并可在上述至少一个处理器40上运行的计算机程序42,上述处理器40执行上述计算机程序42时实现以下步骤:
在对数据库中的第一字段对应的数据进行变更时,获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到;
根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据;
执行上述数据库操作语句。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,上述根据上述预设表达式生成数据库操作语句,包括:
对上述预设表达式进行语法解析,生成抽象语法树,上述抽象语法树包括至少一个节点,每个节点用于表征上述预设表达式中的一个操作数、上述预设表达式中的一个函数或上述预设表达式中的一个运算符;
根据上述抽象语法树生成上述数据库操作语句。
在上述第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,上述数据库操作语句为SQL语句,上述根据上述抽象语法树生成上述数据库操作语句,包括:
遍历上述抽象语法树,基于预设的语法规则解析得到上述抽象语法树中每个节点的节点类型;
根据各个节点的节点类型,生成上述SQL语句。
在上述第三种可能的实施方式作为基础而提供的第四种可能的实施方式中,上述根据各个节点的节点类型,生成上述SQL语句,包括:
针对上述抽象语法树中的每个节点,根据上述节点的节点类型,生成上述节点对应的第一SQL片段;
根据上述抽象语法树中各个节点之间的连接关系,将各个第一SQL片段组合为第二SQL片段,上述第二SQL片段包括select语句;
根据预设的update语句模板和上述第二SQL片段,生成上述SQL语句。
在上述第三种可能的实施方式作为基础而提供的第五种可能的实施方式中,在上述根据各个节点的节点类型,生成上述SQL语句之前,上述处理器40执行上述计算机程序42时还实现以下步骤:
对各个节点的节点类型进行校验;
相应地,上述根据各个节点的节点类型,生成上述SQL语句,包括:
若上述各个节点的节点类型均通过校验,则根据各个节点的节点类型,生成上述SQL语句。
在上述第一种可能的实施方式作为基础,或上述第二种可能的实施方式作为基础,或上述第三种可能的实施方式作为基础,或上述第四种可能的实施方式作为基础,或上述第五种可能的实施方式作为基础而提供的第六种可能的实施方式中,上述执行上述数据库操作语句,包括:
将上述数据库操作语句添加到目标事务中,上述目标事务为包含用于对上述第一字段对应的数据进行变更的数据库操作语句的事务;
执行上述数据库操作语句;
在执行上述数据库操作语句后,提交上述目标事务。
在上述第一种可能的实施方式作为基础,或上述第二种可能的实施方式作为基础,或上述第三种可能的实施方式作为基础,或上述第四种可能的实施方式作为基础,或上述第五种可能的实施方式作为基础而提供的第七种可能的实施方式中,在上述在对数据库中的第一字段对应的数据进行变更时,获取上述数据库中的第二字段对应的预设表达式之前,上述处理器40执行上述计算机程序42时还实现以下步骤:
在对数据库中的任一字段对应的数据进行变更时,判断上述字段是否为上述第一字段;
若上述字段不为上述第一字段,则提交目标事务,上述目标事务为包含用于对上述字段对应的数据进行变更的数据库操作语句的事务。
上述终端设备4可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。该终端设备可包括,但不仅限于,处理器40、存储器41。本领域技术人员可以理解,图4仅仅是终端设备4的举例,并不构成对终端设备4的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如还可以包括输入输出设备、网络接入设备等。
所称处理器40可以是中央处理单元(Central Processing Unit,CPU),该处理器40还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
上述存储器41在一些实施例中可以是上述终端设备4的内部存储单元,例如终端设备4的硬盘或内存。上述存储器41在另一些实施例中也可以是上述终端设备4的外部存储设备,例如上述终端设备4上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,上述存储器41还可以既包括上述终端设备4的内部存储单元也包括外部存储设备。上述存储器41用于存储操作系统、应用程序、引导装载程序(BootLoader)、数据以及其他程序等,例如上述计算机程序的程序代码等。上述存储器41还可以用于暂时地存储已经输出或者将要输出的数据。
由上可见,本申请方案中,在对数据库中的第一字段对应的数据进行变更时,首先获取上述数据库中的第二字段对应的预设表达式,上述第二字段对应的数据根据上述第一字段对应的数据和上述预设表达式计算得到,然后根据上述预设表达式生成数据库操作语句,上述数据库操作语句用于更新上述第二字段对应的数据,最后执行上述数据库操作语句。本申请方案通过为数据库中的每个第二字段(即冗余字段)设置对应的预设表达式,在需要更新第二字段对应的数据时,只需根据该预设表达式生成并执行数据库操作语句,即可实现对第二字段对应的数据进行更新,此种方式无需在代码中计算第二字段对应的数据,可以减少用于实现冗余字段的更新的代码量,提高开发效率。并且,由于冗余字段的更新是通过一个数据库操作语句来执行,可以降低发生死锁的概率。
需要说明的是,上述装置/单元之间的信息交互、执行过程等内容,由于与本申请方法实施例基于同一构思,其具体功能及带来的技术效果,具体可参见方法实施例部分,此处不再赘述。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本申请实施例还提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现上述各个方法实施例中的步骤。
本申请实施例提供了一种计算机程序产品,当计算机程序产品在终端设备上运行时,使得终端设备执行上述各个方法实施例中的步骤。
上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质至少可以包括:能够将计算机程序代码携带到终端设备的任何实体或装置、记录介质、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质。例如U盘、移动硬盘、磁碟或者光盘等。在某些司法管辖区,根据立法和专利实践,计算机可读介质不可以是电载波信号和电信信号。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
在本申请所提供的实施例中,应该理解到,所揭露的装置/网络设备和方法,可以通过其它的方式实现。例如,以上所描述的装置/网络设备实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。
上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种数据库管理方法,其特征在于,包括:
在对数据库中的第一字段对应的数据进行变更时,获取所述数据库中的第二字段对应的预设表达式,所述第二字段对应的数据根据所述第一字段对应的数据和所述预设表达式计算得到;
根据所述预设表达式生成数据库操作语句,所述数据库操作语句用于更新所述第二字段对应的数据;
执行所述数据库操作语句。
2.根据权利要求1所述的数据库管理方法,其特征在于,所述根据所述预设表达式生成数据库操作语句,包括:
对所述预设表达式进行语法解析,生成抽象语法树,所述抽象语法树包括至少一个节点,每个节点用于表征所述预设表达式中的一个操作数、所述预设表达式中的一个函数或所述预设表达式中的一个运算符;
根据所述抽象语法树生成所述数据库操作语句。
3.根据权利要求2所述的数据库管理方法,其特征在于,所述数据库操作语句为SQL语句,所述根据所述抽象语法树生成所述数据库操作语句,包括:
遍历所述抽象语法树,基于预设的语法规则解析得到所述抽象语法树中每个节点的节点类型;
根据各个节点的节点类型,生成所述SQL语句。
4.根据权利要求3所述的数据库管理方法,其特征在于,所述根据各个节点的节点类型,生成所述SQL语句,包括:
针对所述抽象语法树中的每个节点,根据所述节点的节点类型,生成所述节点对应的第一SQL片段;
根据所述抽象语法树中各个节点之间的连接关系,将各个第一SQL片段组合为第二SQL片段,所述第二SQL片段包括select语句;
根据预设的update语句模板和所述第二SQL片段,生成所述SQL语句。
5.根据权利要求3所述的数据库管理方法,其特征在于,在所述根据各个节点的节点类型,生成所述SQL语句之前,所述数据库管理方法还包括:
对各个节点的节点类型进行校验;
相应地,所述根据各个节点的节点类型,生成所述SQL语句,包括:
若所述各个节点的节点类型均通过校验,则根据各个节点的节点类型,生成所述SQL语句。
6.根据权利要求1至5任一项所述的数据库管理方法,其特征在于,所述执行所述数据库操作语句,包括:
将所述数据库操作语句添加到目标事务中,所述目标事务为包含用于对所述第一字段对应的数据进行变更的数据库操作语句的事务;
执行所述数据库操作语句;
在执行所述数据库操作语句后,提交所述目标事务。
7.根据权利要求1至5任一项所述的数据库管理方法,其特征在于,在所述在对数据库中的第一字段对应的数据进行变更时,获取所述数据库中的第二字段对应的预设表达式之前,所述数据库管理方法还包括:
在对数据库中的任一字段对应的数据进行变更时,判断所述字段是否为所述第一字段;
若所述字段不为所述第一字段,则提交目标事务,所述目标事务为包含用于对所述字段对应的数据进行变更的数据库操作语句的事务。
8.一种数据库管理装置,其特征在于,包括:
表达式获取单元,用于在对数据库中的第一字段对应的数据进行变更时,获取所述数据库中的第二字段对应的预设表达式,所述第二字段对应的数据根据所述第一字段对应的数据和所述预设表达式计算得到;
语句生成单元,用于根据所述预设表达式生成数据库操作语句,所述数据库操作语句用于更新所述第二字段对应的数据;
语句执行单元,用于执行所述数据库操作语句。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述的方法。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010978019.9A CN112948400A (zh) | 2020-09-17 | 2020-09-17 | 一种数据库管理方法、数据库管理装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010978019.9A CN112948400A (zh) | 2020-09-17 | 2020-09-17 | 一种数据库管理方法、数据库管理装置及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112948400A true CN112948400A (zh) | 2021-06-11 |
Family
ID=76234559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010978019.9A Pending CN112948400A (zh) | 2020-09-17 | 2020-09-17 | 一种数据库管理方法、数据库管理装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112948400A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113239064A (zh) * | 2021-06-24 | 2021-08-10 | 江苏创源电子有限公司 | 一种数据库更新方法、装置、电子设备及存储介质 |
CN114169309A (zh) * | 2021-12-13 | 2022-03-11 | 平安养老保险股份有限公司 | 修改行为数据表的方法、装置、计算机设备及存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858742A (zh) * | 2006-03-17 | 2006-11-08 | 华为技术有限公司 | 一种在实时数据库中实现更新数据的方法和系统 |
CN101582138A (zh) * | 2009-06-23 | 2009-11-18 | 用友软件股份有限公司 | 动态业务处理系统和方法 |
CN103345501A (zh) * | 2013-06-27 | 2013-10-09 | 华为技术有限公司 | 数据库更新方法和装置 |
CN109471857A (zh) * | 2018-09-25 | 2019-03-15 | 中国平安人寿保险股份有限公司 | 基于sql语句的数据修改方法、装置及存储介质 |
CN109857757A (zh) * | 2019-01-22 | 2019-06-07 | 珠海格力电器股份有限公司 | 数据库间的语句转换方法、系统和终端 |
CN110209684A (zh) * | 2019-06-03 | 2019-09-06 | 深圳前海微众银行股份有限公司 | 数据库ddl变更操作的跟踪方法、装置、系统及介质 |
CN110889286A (zh) * | 2019-10-12 | 2020-03-17 | 平安科技(深圳)有限公司 | 基于数据表的依赖关系识别方法、装置和计算机设备 |
CN111177165A (zh) * | 2019-12-23 | 2020-05-19 | 拉扎斯网络科技(上海)有限公司 | 数据一致性检测的方法、装置及设备 |
-
2020
- 2020-09-17 CN CN202010978019.9A patent/CN112948400A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858742A (zh) * | 2006-03-17 | 2006-11-08 | 华为技术有限公司 | 一种在实时数据库中实现更新数据的方法和系统 |
CN101582138A (zh) * | 2009-06-23 | 2009-11-18 | 用友软件股份有限公司 | 动态业务处理系统和方法 |
CN103345501A (zh) * | 2013-06-27 | 2013-10-09 | 华为技术有限公司 | 数据库更新方法和装置 |
CN109471857A (zh) * | 2018-09-25 | 2019-03-15 | 中国平安人寿保险股份有限公司 | 基于sql语句的数据修改方法、装置及存储介质 |
CN109857757A (zh) * | 2019-01-22 | 2019-06-07 | 珠海格力电器股份有限公司 | 数据库间的语句转换方法、系统和终端 |
CN110209684A (zh) * | 2019-06-03 | 2019-09-06 | 深圳前海微众银行股份有限公司 | 数据库ddl变更操作的跟踪方法、装置、系统及介质 |
CN110889286A (zh) * | 2019-10-12 | 2020-03-17 | 平安科技(深圳)有限公司 | 基于数据表的依赖关系识别方法、装置和计算机设备 |
CN111177165A (zh) * | 2019-12-23 | 2020-05-19 | 拉扎斯网络科技(上海)有限公司 | 数据一致性检测的方法、装置及设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113239064A (zh) * | 2021-06-24 | 2021-08-10 | 江苏创源电子有限公司 | 一种数据库更新方法、装置、电子设备及存储介质 |
CN114169309A (zh) * | 2021-12-13 | 2022-03-11 | 平安养老保险股份有限公司 | 修改行为数据表的方法、装置、计算机设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107704265B (zh) | 一种面向业务流可配置的规则生成方法 | |
CN107644323B (zh) | 一种面向业务流的智能审核系统 | |
US9213707B2 (en) | Ordered access of interrelated data files | |
US6442684B1 (en) | Determining a current machine state of software | |
US9449044B1 (en) | Mistake avoidance and correction suggestions | |
CN110795455A (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US7451137B2 (en) | Using a rowset as a query parameter | |
US8364696B2 (en) | Efficient incremental parsing of context sensitive programming languages | |
CN101751281A (zh) | 编译器生成系统和方法 | |
US9311077B2 (en) | Identification of code changes using language syntax and changeset data | |
CN111626028A (zh) | 基于函数解析的报表生成方法、装置、设备及计算机介质 | |
CN111159016A (zh) | 一种规范检测方法及装置 | |
CN112948400A (zh) | 一种数据库管理方法、数据库管理装置及终端设备 | |
CN114090671A (zh) | 数据导入方法、装置、电子设备及存储介质 | |
CN116266229A (zh) | 确定用于软件漏洞检测和纠正的细化上下文的方法和装置 | |
US11182375B2 (en) | Metadata validation tool | |
US10719424B1 (en) | Compositional string analysis | |
WO2016037167A1 (en) | Identifying mathematical operators in natural language text for knowledge-based matching | |
CN110737642B (zh) | 数据库信息分析方法、装置、计算机装置及存储介质 | |
CN118103815A (zh) | 编译方法以及用于编译的装置 | |
CN109597638B (zh) | 基于实时计算引擎解决数据处理、设备联动的方法及装置 | |
CN113722321A (zh) | 数据导出方法、装置和电子设备 | |
CN110018828B (zh) | 源代码检查方法、装置及终端设备 | |
US10949327B2 (en) | Manipulation of complex variables in orchestration applications | |
de Boer et al. | Completeness and complexity of reasoning about call-by-value in Hoare logic |
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 |