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

一种基于数据库表触发器实现的表数据流检查方法与流程

2022-09-04 08:42:06 来源:中国专利 TAG:
1.本发明涉及基于数据库表触发器实现的表数据流检查方法
技术领域
:,具体涉及一种基于数据库表触发器实现的表数据流检查方法。
背景技术
::2.随着信息技术的发展,各行各业的应用软件集成规模越来越大,数据关系越来越复杂,数据规模也在快速增长,尤其互联网应用,用户量可达到亿级以上。庞大的软件工程不仅对技术开发带来难度,对软件的质量检测也带来巨大挑战。3.基于成本及效率的考虑,当前软件质量的验证非常依赖黑盒集成测试,即从使用方的角度设计一些场景验证,观察功能操作后的最终数据结果。黑盒测试不仅不了解程序内部的代码及实现,对数据库的数据准确性检查也存在较大不足,难以发现一些较深入的数据记录及变化逻辑问题,尤其当前的互联网应用系统、电信应用系统、金融应用等系统数据关联复杂,存储的数据量也非常庞大,但这些应用的数据问题只有部分能在黑盒测试中检查出来,尤其对于一些数据中间状态的变化、非预期的数据变化等数据检查黑盒测试难于发现,仅依赖黑盒测试方法的质量保障效果在日益复杂庞大的应用系统面前越来越有限。数据错误不仅影响系统的功能使用或体验,甚至会造成用户的利益收到损失,因此测试过程中全面检查数据非常有必要。技术实现要素:4.本发明的目的是针对现有技术存在的不足,提供一种基于数据库表触发器实现的表数据流检查方法。5.为实现上述目的,本发明提供了一种基于数据库表触发器实现的表数据流检查方法,包括:6.步骤1、确定需要建立触发器的数据库表及其字段;7.步骤2、创建统一收集变化数据的检查表,所述检查表记录的内容包括变化的数据库表、字段、字段修改前后信息、变化时间、变化类型和数据变化顺序;8.步骤3、创建动态sql,并建立数据库表的insert和delete触发器以及表字段的update触发器的脚本及卸载所述触发器的脚本;9.步骤4、查询所述检查表,并统一查看数据库表变化内容及顺序的正确性;10.步骤5、检查完成后通过卸载所述触发器的脚本卸载触发器。11.进一步的,在数据库表较少时,根据对系统的分析,并结合测试验证特性,人工筛选出需要建立触发器的数据库表及其字段;12.在数据库表较多时,通过数据库的系统表或视图查询出数据库表及其字段。13.进一步的,所述变化类型包括增加、修改和删除。14.进一步的,所述步骤3具体包括:15.对步骤1确定的数据库表建立insert触发器,在向所述数据库表中插入数据时,同时往检查表插入一条数据,通过’new.列名’获取数据库表中插入的数据;16.对步骤1确定的数据库表建立delete触发器,当删除数据库表中的数据时,同时往检查表插入一条数据,通过’old.列名’获取删除的数据;17.对步骤1确定的数据库表建立update触发器,当更新数据库表中的数据时,同时往检查表插入一条数据,通过’new.列名’获取更新的新数据,并通过’old.列名’获取更新前的老数据。18.有益效果:本发明利用数据库系统的触发器技术记录表数据内容的改动及顺序,再通过展示层实现可视化检查,本发明相对于当前的黑盒集成测试检查手段,有如下优点:19.1、本发明利用触发器技术可以收集到所有数据库表变化情况,可以保障数据检查的全面性;20.2、本发明可以监测到数据的变化顺序,根据顺序的变化可以检查业务流的逻辑性;21.3、本发明可以提高数据的检查效率,通过展示层快速呈现操作所有涉及的数据变化,减少手工逐一查询检查,对于涉及多系统的应用检查效果更明显;22.4、本发明采用了数据库成熟的触发器技术,做到了独立于系统代码,不影响原有系统的任何业务逻辑,保障了使用该方法的安全性;23.5、本发明建立在数据库的触发器技术基础之上,当前主流的mysql、oracle、sqlserver等数据库触发器技术均较成熟,应用范围广。附图说明24.图1是基于数据库表触发器实现的表数据流检查方法的结构示意图;25.图2是筛选mysql数据库表的示意图;26.图3是筛选mysql数据库表字段的示意图。具体实施方式27.下面结合附图和具体实施例,进一步阐明本发明,本实施例在以本发明技术方案为前提下进行实施,应理解这些实施例仅用于说明本发明而不用于限制本发明的范围。28.如图1至3所示,本发明实施例提供了一种基于数据库表触发器实现的表数据流检查方法,包括:29.步骤1、确定需要建立触发器的数据库表及其字段。具体的,需要针对业务的分析确定出需要检查的表及字段,根据数据库应用系统涉及表的多寡,通常可以采用两种方法:30.1、在数据库表较少时,根据对系统的分析,并结合测试验证特性,人工筛选出需要建立触发器的数据库表及其字段。31.2、在数据库表较多时,通过数据库的系统表或视图查询出数据库表及其字段。以mysql数据库为例,所有用户的数据库表都保存在information_schema.tables表中,如查询information_schema用户下所有的表名称,如果范围过大,可以通过一些过滤条件进行筛选,具体可参见图2。在确定表范围后,从数据库系统表或视图中再查找出数据库表的各字段,以mysql数据库为例,查询information_schema用户的数据库表的字段的方式可参见图3。32.步骤2、创建统一收集变化数据的检查表,检查表记录的内容包括变化的数据库表、字段、字段修改前后信息、变化时间和变化类型,上述变化类型包括增加、修改和删除。同时通过创建一个自动增长序列用于记录数据变化顺序,也可以根据检查需要,增加标志同一个sql操作的字段,用于识别数据变化时是否为同一段sql触发。以mysql为例,创建检查表的方式如下:33.createtable`datachg_log`(34.`id`bigint(20)notnullauto_increment,35.`serno`bigint(20)notnullcomment'执行序列',36.`tbl`varchar(100)notnullcomment'表名称',37.`col`varchar(100)notnullcomment'字段名',38.`type`varchar(20)notnullcomment'变化类型',39.`beforevlu`varchar(1000)defaultnullcomment'变化前数据',40.`aftervlu`varchar(1000)defaultnullcomment'变化前数据',41.`create_at`timestampnotnulldefaultcurrent_timestamponupdatecurrent_timestampcomment'创建时间',42.primarykey(`id`)usingbtree43.)engine=innodbauto_increment=14defaultcharset=utf8mb4。44.步骤3、创建动态sql,并建立数据库表的insert和delete触发器以及表字段的update触发器的脚本及卸载所述触发器的脚本。具体如下:45.对步骤1确定的数据库表建立insert触发器,在向所述数据库表中插入数据时,同时往检查表插入一条数据,通过’new.列名’获取数据库表中插入的数据。具体方式如下:46.createtrigger`表1_insert`afterinserton`表1`foreachrowbegin47.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','insert','null',new.字段1);48....49.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','insert','null',new.字段n);50.end。51.对步骤1确定的数据库表建立delete触发器,当删除数据库表中的数据时,同时往检查表插入一条数据,通过’old.列名’获取删除的数据。具体方式如下:52.createtrigger`表1_delete`afterdeleteon`表1`foreachrowbegin53.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','delete',old.字段1,'null');54....55.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','name','delete',old.字段n,'null');56.end。57.对步骤1确定的数据库表建立update触发器,当更新数据库表中的数据时,同时往检查表插入一条数据,通过’new.列名’获取更新的新数据,并通过’old.列名’获取更新前的老数据。具体方式如下:58.createtrigger`表1_update`afterupdateon`表1`foreachrowbegin59.ifnew.字段1《》old.字段1then60.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','update',old.字段1,new.字段1);61.endif;62....63.ifnew.字段n《》old.字段nthen64.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','update',old.字段n,new.字段n);65.endif;66.end。67.上述步骤展示了单表建立触发器的关键步骤,实际应用中可以通过数据库函数或过程,关联确认的表及字段创建动态sql进行创建及卸载。68.步骤4、查询所述检查表,并统一查看数据库表变化内容及顺序的正确性。69.步骤5、检查完成后通过卸载触发器的脚本卸载触发器。70.举例说明:71.1、test1_user表有四个字段,分别为id、name、remark、created_at字段,在每个字段上建立相应的update触发器,以及表记录的insert和delete触发器,对每条数据、每个字段的变化进行监控,当有数据变化时及时登记变化明细。72.2、创建检查表datachg_log统一记录数据库表记录变化情况,设置id字段为自动增长记录变化顺序。73.3、创建insert触发器,记录新增数据所有字段变化信息74.createtrigger`tr_test1_user_insert`afterinserton`test1_user`foreachrowbegin75.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','insert','null',new.id);76.……77.4、创建update触发器,记录修的所有字段变化信息78.createtrigger`tr_test1_user_update`afterupdateon`test1_user`foreachrowbegin79.ifnew.id《》old.idthen80.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','update',old.id,new.id);81.endif;82.……83.5、创建delete触发器,记录修的所有字段变化信息84.createtrigger`tr_test1_user_delete`afterdeleteon`test1_user`foreachrowbegin85.insertintodatachg_log(serno,tbl,col,type,beforevlu,aftervlu)values(sno,'test1_user','id','delete',old.id,'null');86.……87.6、模拟修改test1_user表数据:新增两条数据“测试1”和“测试2”,再修改“测试1”,最后删除“测试2”数据88.insertintotest1_user(name,remark)values('测试1','新增记录1');89.insertintotest1_user(name,remark)values('测试2','新增记录2');90.updatetest1_usersetremark='修改测试1'wherename='测试1';91.deletefromtest1_userwherename='测试2';92.7、按照黑盒测试方法来检查,只能检查最后到数据库表只有一条remark为“修改测试1”的数据,中间过程变化难以检查,存在遗漏检查风险。使用本发明后,所有数据变化明细均记录到统一的表中,通过展示层查询明细即可检查所有的数据变化明细,做到数据变化的全面检查,展示层示例如表1所示:[0093][0094]表1[0095]以上所述仅是本发明的优选实施方式,应当指出,对于本
技术领域
:的普通技术人员来说,其它未具体描述的部分,属于现有技术或公知常识。在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。当前第1页12当前第1页12
再多了解一些

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

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

相关文献