数据表处理方法及系统技术方案

技术编号:8489807 阅读:214 留言:0更新日期:2013-03-28 11:12
本发明专利技术涉及一种数据表处理方法及系统。该方法包括以下步骤:创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。上述数据表处理方法及系统,由于锁定了记录,可保证某个用户对数据表操作,其他用户对该数据表的操作无效,如此不会出现序列号冲突的情形。

【技术实现步骤摘要】
数据表处理方法及系统
本专利技术涉及数据表处理领域,特别涉及一种数据表处理方法及系统。
技术介绍
在数据库中,序列生成器可以为数据表中的行自动生成序列号,产生一组等间隔的数值,主要用于生成数据表的主键值。其中,主键又称主关键字(primary key),是指表中的一个或多个字段,它的值用于唯一的标识表中的某一条记录。在数据库的应用中,需要为数据表中的每条记录生成ID(Identity,序列号),将该ID作为主键。传统的方法是使用某种算法生成字符串,使得每次生成的字符串是不同的,如利用机器时间加MAC(Media Access Control,硬件地址)地址加随机因子按照某种 策略生成的字符串,但字符串长度通常至少为32个字符,对空间要求比数字ID (Identity,序列号)要高,导致索引查询速度比数字ID要慢,且当多个用户对同一数据表进行操作时,可能会导致出现序列号冲突;传统的方法也有使用数据库系统的主键自增功能的,如SqlServer的Identity, MySql的Auto_Increment等,该数据模型的ID是数字值,但序列生成器无法与具体的数据库系统解耦,即针对每个数据库系统需要相应的一个序列生成器实现,且当多个用户对同一数据包进行操作时,可能会导致出现序列号冲突。
技术实现思路
基于此,有必要提供一种能防止序列号冲突的数据表处理方法。一种数据表处理方法,包括以下步骤创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。优选地,在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定的步骤具体为在所述序列表中查找所述用户操作的数据表的名称,在所述序列表中未查找到时,将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录中的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。优选地,在获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值的步骤之后还包括步骤形成包含预定值个序列号的序列区间块;根据所述更新后的序列当前最大值更新所述用户操作的数据表的步骤为根据所述序列区间块更新所述用户操作的数据表。优选地,所述获取用户对所述数据表的操作请求的步骤之后,还包括判断所述序列区间块中序列号是否用完,若是,则获取新的序列区间块,若否,则直接从所述序列区间块中获取序列号,根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。优选地,所述序列区间块中记录了起始序列号、最大序列号和当前序列号。此外,还有必要提供一种能防止序列号冲突的数据表处理系统。一种数据表处理系统,包括创建模块,用于创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取模块,用于获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;查找模块,用于在所述序列表中查找所述用户操作的数据表的名称;处理模块,用于将所述序列表中的包含所述数据表的名称的记录进行锁定,获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;更新模块,用于根据所述更新后的序列当前最大值更新所述用户操作的数据表。优选地,在所述查找模块在所述序列表中未查找到所述用户操作的数据表的名称时,所述处理模块还用于对将所述序列表进行锁定,在所述序列表中创建包含所述用户操作的数据表的名称的记录,初始化所述记录的序列当前最大值,然后将所述序列表中的包含所述数据表的名称的记录进行锁定。优选地,所述处理模块还用于形成包含预定值个序列号的序列区间块;所述更新模块还用于根据所述序列区间块更新所述用户操作的数据表。优选地,还包括判断模块,所述判断模块用于在所述获取模块获取所述用户对所述数据表的操作请求后,判断所述序列区间块中序列号是否用完,所述获取模块在所述判断模块判断出所述序列区间块中序列号已用完时,所述处理模块还用于获取新的序列区间块,所述处理模块还用于在所述判断模块判断出所述序列区间块中序列号未用完时,直接从所述序列块中获取序列号,所述更新模块还用于根据获取的序列号更新所述用户操作的数据表,其中,所述序列号小于所述序列当前最大值。优选地,所述序列块中记录了起始序列号、最大序列号和当前序列号。上述数据表处理方法及系统,创建序列表,获取用户对数据表的操作请求及数据表的名称,在序列表中查找用户操作的数据表的名称,将包含该数据表的名称的记录进行锁定,获取锁定的记录中的序列当前最大值,增加预定值后,更新序列当前最大值,再根据更新的序列当前最大值更新用户操作的数据表,由于锁定了包含用户操作的数据表的名称的记录,可保证某个用户对数据表进行操作时,其他用户对该数据表的操作无效,如此不会出现序列号冲突的情形,可应用于分布式环境中的数据同步。附图说明图1为一个实施例中数据表处理方法的流程图;图2为一个实施例中数据表处理系统的结构不意图;图3为另一个实施例中数据表处理系统的结构示意图。具体实施方式下面结合具体的实施例及附图对序列生成方法及系统的技术方案进行详细的描述。如图1所示,在一个实施例中,一种序列生成方法,包括以下步骤步骤S110,创建序列表,该序列表包括数据表的名称字段、序列当前最大值字段和 主键字段。利用标准的SQL语言创建一个序列表。该序列表中包括数据表的名称字段、序列当前最大值字段和主键字段。例如,创建的序列表的结构如下create table My_IDSequence (seqName varchar(128),seqNext int,primary key(seqName));其中,seqName varchar (128)表示数据表的名称字段,seqNext int表示序列当前最大值字段,primary key (seqName)表示主键字段。该序列表中存有多条数据表的记录。序列当前最大值字段中的值表示数据表中已有序列号的最大值或数据表中下次将要生成的序列号,如数据表中已存在的序列号的最大值为20,则序列表中记录的该数据表的序列当前最大值可为20或21。本实施例中,该序列表中记录的数据表的序列当前最大值为数据表下次将要生成的序列号。该序列表以数据表的名称字段作为主键。步骤S120,获取用户对数据表的操作请求,根据该操作请求获取用户操作的数据表的名称。获取用户对数据表的操作请求,因序列表中存有多条数据表的记录,需获取用户操作的数据表的名称,以便后续在序列表中查找。获取用户对数据表的操作请求后,会与数据库建立连接,此时,需将该连接设置为非自动提交数据,以保证后续的锁定操作。向数据库提交数据是一项数据库事务。一般情况下,数据库事务默认为自动提交,即作为一个操作后即提交数据,本实施例中,需将本文档来自技高网...

【技术保护点】
一种数据表处理方法,包括以下步骤:创建序列表,所述序列表包括数据表的名称字段、序列当前最大值字段和主键字段;获取用户对数据表的操作请求,根据所述操作请求获取用户操作的数据表的名称;在所述序列表中查找所述用户操作的数据表的名称,将所述序列表中的包含所述数据表的名称的记录进行锁定;获取所述序列表中锁定的记录中的序列当前最大值,并将所述序列当前最大值增加预定值,更新所述序列当前最大值;根据所述更新后的序列当前最大值更新所述用户操作的数据表。

【技术特征摘要】

【专利技术属性】
技术研发人员:陈伟君
申请(专利权)人:深圳市金蝶中间件有限公司
类型:发明
国别省市:

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

1