本發明專利技術涉及一種數據表處理方法及系統。該方法包括以下步驟:創建序列表,所述序列表包括數據表的名稱字段、序列當前最大值字段和主鍵字段;獲取用戶對數據表的操作請求,根據所述操作請求獲取用戶操作的數據表的名稱;在所述序列表中查找所述用戶操作的數據表的名稱,將所述序列表中的包含所述數據表的名稱的記錄進行鎖定;獲取所述序列表中鎖定的記錄中的序列當前最大值,并將所述序列當前最大值增加預定值,更新所述序列當前最大值;根據所述更新后的序列當前最大值更新所述用戶操作的數據表。上述數據表處理方法及系統,由于鎖定了記錄,可保證某個用戶對數據表操作,其他用戶對該數據表的操作無效,如此不會出現序列號沖突的情形。
【技術實現步驟摘要】
數據表處理方法及系統
本專利技術涉及數據表處理領域,特別涉及一種數據表處理方法及系統。
技術介紹
在數據庫中,序列生成器可以為數據表中的行自動生成序列號,產生一組等間隔的數值,主要用于生成數據表的主鍵值。其中,主鍵又稱主關鍵字(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,獲取用戶對數據表的操作請求,根據該操作請求獲取用戶操作的數據表的名稱。獲取用戶對數據表的操作請求,因序列表中存有多條數據表的記錄,需獲取用戶操作的數據表的名稱,以便后續在序列表中查找。獲取用戶對數據表的操作請求后,會與數據庫建立連接,此時,需將該連接設置為非自動提交數據,以保證后續的鎖定操作。向數據庫提交數據是一項數據庫事務。一般情況下,數據庫事務默認為自動提交,即作為一個操作后即提交數據,本實施例中,需將本文檔來自技高網...
【技術保護點】
一種數據表處理方法,包括以下步驟:創建序列表,所述序列表包括數據表的名稱字段、序列當前最大值字段和主鍵字段;獲取用戶對數據表的操作請求,根據所述操作請求獲取用戶操作的數據表的名稱;在所述序列表中查找所述用戶操作的數據表的名稱,將所述序列表中的包含所述數據表的名稱的記錄進行鎖定;獲取所述序列表中鎖定的記錄中的序列當前最大值,并將所述序列當前最大值增加預定值,更新所述序列當前最大值;根據所述更新后的序列當前最大值更新所述用戶操作的數據表。
【技術特征摘要】
【專利技術屬性】
技術研發人員:陳偉君,
申請(專利權)人:深圳市金蝶中間件有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。