一種數據庫主鍵的生成方法和裝置的制造方法
【技術領域】
[0001]本發明涉及計算機技術領域,尤其涉及一種數據庫主鍵的生成方法和裝置。
【背景技術】
[0002]在應用軟件的使用過程中,如果需要利用數據庫來存儲和管理數據,就無法避免數據庫主鍵的生成問題。數據庫包括至少一個數據表,數據表用于存儲數據,主鍵用于標識數據表中存儲的數據,主鍵可以用數值來表示,該數值即主鍵值。現有主鍵的生成方法是:在數據庫中新建一個數據表后,向數據表內存儲數據時,以遞增的方式為存儲的數據分配主鍵。由于每個新建的數據表都是相互獨立的,都以相同的方法生成主鍵,因此不能確保不同數據表之間主鍵值的唯一性,例如,同一主鍵值對應了多個數據表中存儲的數據。
[0003]需要指出的是,重復的主鍵值將會導致諸多錯誤,例如,后期將兩個數據表合為一個數據表時,合成的數據表中會出現同一主鍵值對應了兩個不同的數據,不能起到唯一標識的作用。
【發明內容】
[0004]本發明實施例所要解決的技術問題在于,提供一種數據庫主鍵的生成方法和裝置,可以實現生成唯一的主鍵值,確保數據庫中所有數據表的主鍵值不重復,且具有高效的特點。
[0005]為了解決上述技術問題,本發明實施例提供了一種數據庫主鍵的生成方法,包括:
[0006]在數據庫中建立主鍵數據表,所述主鍵數據表中存儲有多個不重復的主鍵值;
[0007]當獲取到主鍵生成指令時,從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中;
[0008]從內存中的所述預設數量的主鍵值中,獲取至少一個主鍵值分配給目標數據表作為其中至少一個數據的對應的主鍵值。
[0009]在第一方面的第一種可能實現方式中,所述在數據庫中建立主鍵數據表,包括:
[0010]以遞增的方式,或不重復隨機數的方式生成多個主鍵值;
[0011]在數據庫中建立存儲有所述多個主鍵值的所述主鍵數據表。
[0012]結合第一方面的可能實現方式,在第二種可能實現方式中,所述當獲取到主鍵生成指令時,從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中,包括:
[0013]當獲取到主鍵生成指令時,鎖定所述主鍵數據表以阻止其它指令從所述主鍵數據表中獲取主鍵值;
[0014]從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中,并解除鎖定所述主鍵數據表。
[0015]結合第一方面的可能實現方式,在第三種可能實現方式中,所述從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中之后,還包括:
[0016]將所述主鍵數據表中被獲取的所述預設數量的主鍵值標記為已獲取狀態。
[0017]結合第一方面以及第一方面的第一種可能實現方式,在第四種可能實現方式中,所述從內存中的所述預設數量的主鍵值中,獲取至少一個主鍵值分配給目標數據表作為其中至少一個數據的對應的主鍵值之后,還包括:
[0018]若已分配完內存中的所述預設數量的主鍵值,則從所述主鍵數據表中獲取未被標記為所述已獲取狀態的預設數量的主鍵值保存在內存中。
[0019]相應地,本發明實施例還提供了一種數據庫主鍵的生成裝置,包括:
[0020]數據表建立模塊,用于在數據庫中建立主鍵數據表,所述主鍵數據表中存儲有多個不重復的主鍵值;
[0021]主鍵值獲取模塊,用于當獲取到主鍵生成指令時,從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中;
[0022]主鍵值分配模塊,用于從內存中的所述預設數量的主鍵值中,獲取至少一個主鍵值分配給目標數據表作為其中至少一個數據的對應的主鍵值。
[0023]在第一方面的第一種可能實現方式中,所述數據表建立模塊,包括:
[0024]主鍵值生成單元,用于以遞增的方式,或不重復隨機數的方式生成多個主鍵值;
[0025]數據表建立單元,用于在數據庫中建立存儲有所述多個主鍵值的所述主鍵數據表。
[0026]結合第一方面的可能實現方式,在第二種可能實現方式中,所述主鍵值獲取模塊,具體用于:
[0027]當獲取到主鍵生成指令時,鎖定所述主鍵數據表以阻止其它指令從所述主鍵數據表中獲取主鍵值;
[0028]從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中,并解除鎖定所述主鍵數據表。
[0029]結合第一方面的可能實現方式,在第三種可能實現方式中,所述生成裝置還包括:
[0030]狀態標記模塊,用于將所述主鍵數據表中被獲取的所述預設數量的主鍵值標記為已獲取狀態。
[0031]結合第一方面以及第一方面的第一種可能實現方式,在第四種可能實現方式中,所述主鍵值獲取模塊,還用于若已分配完內存中的所述預設數量的主鍵值,則從所述主鍵數據表中獲取未被標記為所述已獲取狀態的預設數量的主鍵值保存在內存中。
[0032]實施本發明實施例,具有如下有益效果:本發明實施例先在數據庫中建立主鍵數據表,其中主鍵數據表中存儲有多個不重復的主鍵值,然后當獲取到主鍵生成指令時,從主鍵數據表中獲取預設數量的主鍵值保存在內存中,接著從中獲取至少一個主鍵值分配給目標數據表作為其中至少一個數據的對應的主鍵值,由于主鍵數據表中的主鍵值不重復,而用于生成目標數據表的主鍵值來源于該主鍵數據表,故可以確保生成的數據表的主鍵值是唯一的,進而可確保數據庫中所有數據表的主鍵值不重復,另外,由于預先從主鍵數據表中獲取預設數量的主鍵值保存在內存中,故分配主鍵值時只需從內存中讀取,避免反復多次訪問數據庫的主鍵數據表,具有高效的特點。
【附圖說明】
[0033]為了更清楚地說明本發明實施例或現有技術中的技術方案,下面將對實施例或現有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0034]圖1是本發明實施例提供的一種數據庫主鍵的生成方法的流程示意圖;
[0035]圖2是本發明實施例提供的另一種數據庫主鍵的生成方法的流程示意圖;
[0036]圖3是本發明實施例提供的一種數據庫主鍵的生成裝置的結構示意圖;
[0037]圖4是本發明實施例提供的一種數據表建立模塊的結構示意圖。
【具體實施方式】
[0038]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0039]圖1是本發明實施例中一種數據庫主鍵的生成方法的流程示意圖。如圖所示本實施例中的數據庫主鍵的生成方法的流程可以包括:
[0040]S101,在數據庫中建立主鍵數據表,所述主鍵數據表中存儲有多個不重復的主鍵值。
[0041]所述數據庫包括至少一個數據表,數據表用于存儲數據,主鍵用于標識數據表中存儲的數據,主鍵可以用數值來表示,該數值即主鍵值。
[0042]需要指出的是,主鍵值的參數類型可以是多種,例如十進制整數、二進制整數、十六進制整數等,這里不作限定,另外主鍵值的位數也不作限定,例如八位二進制、四位十六進制等。本發明實施例可根據需要的類別,在主鍵數據表中增加相應的類別即可。
[0043]具體的,在數據庫中建立主鍵數據表的方法可通過以下步驟來實現:
[0044]步驟1,以遞增的方式,或不重復隨機數的方式生成多個主鍵值。
[0045]所述遞增的方式,可以是依序遞增,例如1、2、3、.......、1000,也可以是間序遞增,
例如1、4、7、......、1000等。所述不重復隨機數的方式,可例如0xfl、0x85、.......、0xc6等。
由此可見,生成的主鍵值不會出現重復,確保其唯一性。
[0046]步驟2,在數據庫中建立存儲有所述多個主鍵值的所述主鍵數據表。
[0047]具體實現過程中,在數據庫中建立一個主鍵數據表,將之前生成的主鍵值存儲在該主鍵數據表中。
[0048]S102,當獲取到主鍵生成指令時,從所述主鍵數據表中獲取預設數量的主鍵值保存在內存中。
[0049]所述主鍵生成指令由應用程序或者線程發起,當其代碼需要使用主鍵時將發出主鍵生成指令。所述預設數量可以根據實際情況(如每小時新增到數據庫的數據存儲量)來設定。
[0050]作為一個可選的實施例,當獲取到