在關係型資料庫中,一張表中的每一行資料被稱為一條記錄。一條記錄就是由多個字段組成的。
對於關係表,有個很重要的約束,就是任意兩條記錄不能重複。不能重複不是指兩條記錄不完全相同,而是指能夠通過某個字段唯一區分出不同的記錄,這個字元被稱為主鍵。
對於主鍵的要求,最關鍵的一點是:記錄一旦插入到表中,主鍵最好不要再修改,因為主鍵是用來唯一定位記錄的,修改了主鍵,會造成一系列的影響。
由於主鍵的作用十分重要,如何選取主鍵會對業務開發產生重要影響。如果我們以學生的身份證號作為主鍵,似乎能唯一定位記錄。然而,身份證號也是一種業務場景,如果身份證號公升位了,或者需要變更,作為主鍵,不得不修改的時候,就會對業務產生嚴重影響。
因此,身份證號、手機號、郵箱位址這些看上去可以唯一的字段,均不可用作主鍵。
作為主鍵最好是完全業務無關的字段,我們一般把這個字段命名為 id。常見的可作為 id 字元安的型別有:
自增整數型別:資料庫會在插入資料時自動為每一條記錄分配乙個自增整數,這樣我們就完全不用擔心主鍵重複,也不用自己預先生成主鍵;
全域性唯一guid型別:使用一種全域性唯一的字串作為主鍵,類似 8f55d96b-8acc-4636-8cb8-76bf8abc2f57。guid演算法通過網絡卡mac位址、時間戳和隨機數保證任意計算機在任意時間生成的字串都是不同的,大部分程式語言都內建了guid演算法,可以自己預算出主鍵。
對於大部分應用來說,通常自增型別的主鍵就能滿足需求。
如果使用int自增型別,那麼當一張表的記錄數超過2147483647(約21億)時,會達到上限而出錯。使用bigint自增型別則可以最多約922億億條記錄。關聯式資料庫實際上還允許通過多個字段唯一標識記錄,即兩個或更多的字段都設定為主鍵,這種主鍵被稱為聯合主鍵。
對於聯合主鍵,允許一列有重複,只要不是所有主鍵列都重複即可:
如果我們把上述表的id_num
和id_type
這兩列作為聯合主鍵,那麼上面的3條記錄都是允許的,因為沒有兩列主鍵組合起來是相同的。
沒有必要的情況下,我們盡量不使用聯合主鍵,因為它給關係表帶來了複雜度的上公升。
主鍵是關係表中記錄的唯一標識。主鍵的選取非常重要:主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null
。
可以使用多個列作為聯合主鍵,但聯合主鍵並不常用。
主鍵自增 修改序列 關於自增id 你可能還不知道
1.mysql為什麼建議將自增列id設為主鍵?綜上而言 當我們使用自增列作為主鍵時,訪問效率是最高的。2.自增列id一定是連續的嗎?自增id是增長的 不一定連續。我們先來看下mysql 對自增值的儲存策略 innodb 引擎的自增值,其實是儲存在了記憶體裡,並且到了 mysql 8.0 版本後,才有...
pandas進行資料分析
最近參加了一次apmcm,題目給出了很多 我們需要對資料進行分析。顯然,作為一名會python的大學生,肯定不會直接在 上進行各種變動,本文就如何使用pandas對excel 進行資料分析做一些介紹。3.1 讀取所有表中的職業 讀取所有表中的職業 pros.xlsx中有所有職業 pros path ...
sklearn進行資料分析
呼叫線性回歸函式 from sklearn.linear model import linearregression 匯入資料集 這裡將全部資料用於訓練,並沒有對資料進行劃分,上例中 將資料劃分為訓練和測試資料,後面會講到交叉驗證 loaded data datasets.load boston d...