MySQL 之主鍵

本文標識 : MQ0021

本文編輯 : 長安月下賞美人兒

編程工具 : MySQL、DBeaver

閱讀時長 : 4分鐘

前言

小編在查詢相關的學習資料的同時,偶爾會遇到關於主鍵的信息,也是一直沒有很清晰的認知,所以,這篇學習筆記,主要是和大家一起分享有關主鍵的知識。

什麼是主鍵

  • 含義:表中經常有一個列或多列的組合,其值能唯一地標識表中的每一行。這樣的一列或多列稱為表的主鍵。
  • 定義:PRIMARY KEY
  • 注意:主鍵之於數據表相當於口紅之於女人,可以不用,但最好還是有

主鍵選擇的遵循原則

  • 任何兩行都不具有相同的主鍵值
  • 每行必須具有一個主鍵值,且不允許設置為NULL
  • 主鍵應當是對用戶沒有意義的
  • 永遠不要更新主鍵,主鍵除了唯一標識一行之外再無其他意義
  • 主鍵不應包含動態變化的數據,如時間戳、創建/修改時間列等
  • 主鍵應當由計算機自動生成

主鍵的作用

  • 保證實體的完整性
  • 加快數據庫的操作速度
  • 在表中添加新記錄時,DBMS會自動檢查新記錄的主鍵值,不允許該值與其他記錄的主鍵值重複
  • DBMS自動按主鍵值的順序顯示錶中的記錄
  • 如果沒有定義主鍵,則按輸入記錄的順序顯示錶中的記錄

主鍵的選擇

  • 編號為主鍵 方法:選擇唯一字段「編號」作為主鍵設計 場景:多用於小型項目 缺點:若修改編號,後果嚴重;若允許編號重複,則徹底懵逼
  • 自動編號為主鍵 方法:新建一個 ID 字段,自動增長 優點:便於檢索傳遞、空間小、無主鍵重複問題 缺點:插入指定 ID 記錄會麻煩、與非數字型主鍵系統對接麻煩
  • Max加一 方法:無自動增長的數字型,採用 Insert時,讀取 Max 值後加一 優點:避免自動編號的問題 缺點:記錄多會嚴重影響效率、會出現相同值的情況

設置主鍵的方法

在創建數據表的同時決定是否有主鍵

#帶主鍵  CREATE TABLE test1(  id INT NOT NULL PRIMARY KEY,  name CHAR(20)  );    #帶複合主鍵  CREATE TABLE test2(  id INT NOT NULL,  name CHAR(20),  PRIMARY KEY(id,name)  );    #主鍵自增  CREATE TABLE test3(  id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,  name VARCHAR(20),  time TIMESTAMP DEFAULT CURRENT_TIMESTAM  );

在創建數據表完成後再決定主鍵

CREATE TABLE test4(  id INT NOT NULL,  name VARCHAR(20)NOT NULL,  time TIMESTAMP DEFAULT CURRENT_TIMESTAM  );    ALTER TABLE test4 ADD PRIMARY KEY(id);