1. 程式人生 > 其它 >主鍵(primary key)和唯一鍵(unique) 知識點總結

主鍵(primary key)和唯一鍵(unique) 知識點總結

技術標籤:資料庫mysql資料庫sqlsqlserver

主鍵(Primary key)

  • 概念

主鍵用於唯一標識表中的每一條資料。

  • 主鍵的特徵:

不能重複, 不能為空。

  • 示例
create table stu1(
    id int auto_increment primary key, <------#主鍵
    name varchar(20)
);

注意點:

auto_increment的欄位必須是主鍵, 但是主鍵不一定是auto_increment的。
一個表只能有一個主鍵, 但是主鍵可以是1個或多個欄位組成。

  • auto_increment 自增長
  1. 自增長欄位的值從1開始, 每次遞增1。
  2. 自增長欄位資料不可以重複, 合適生成唯一的id。
  3. 自增長欄位可以使用null或者default來設定值。
  4. 自增長欄位必須是主鍵 (primary key)。
  • 錯誤示例
錯誤示例1
create table stu2(
    id int auto_increment, <------#會報錯, 自增長的欄位必須是主鍵
    name varchar(20)
);


錯誤示例2
create table stu3(
    id1 int primary key,
    id2 int primary key, <------#會報錯,一張表只能有一個主鍵
    name varchar
(20) );
  • 正確示例
新增主鍵的第一種方式
create table stu4(
    id1 int primary key,   <------#直接指定主鍵欄位
    id2 int,
    name varchar(20)
);


新增主鍵的第二種方式
create table stu5(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1)  <------#語句最後指定主鍵欄位
);


新增主鍵的第三種方式
create table stu6(
    id1 int,
    id2 int,
name varchar(20) ); 沒有主鍵的情況下新增主建 alter table stu6 add primary key(id1); <------#表建立完成後新增主鍵
  • 聯合主建
create table stu7(
    id1 int,
    id2 int,
    name varchar(20),
    primary key(id1,id2) <------#主鍵由兩個欄位組成
);

#不是指定兩個主鍵, 一個primary key就是指定一個主鍵
#這裡只出現了一個primary key, 所以只指定了一個主鍵
#只不過這個主鍵比較特殊, 是由兩個欄位共同組成的
  • 聯合主鍵的應用場景:

如果表中無論哪一個欄位都無法保證資料的唯一性,可以使用多個欄位組合在一起用來保證資料的唯一性。

  • 企業開發中如何選擇主鍵?

最少性: 儘量選擇一個欄位作為主鍵。
穩定性: 儘量選擇更新少的欄位作為主鍵。
儘量選擇整數型別的欄位作為主鍵。
結論: 搞一個id欄位型別為int, 設定自動增長, 作為主鍵。

唯一鍵(unique)

  • 作用

避免新增重複資料, 也就是說如果想保證某一個欄位的值永遠不重複, 那麼就可以將這個欄位設定為唯一鍵。

注意點:

唯一鍵不是主鍵, 主鍵有一個特點是不能重複, 但是唯一鍵不等於主鍵。
一張表中只能有一個主鍵, 但是一張表中可以有多個唯一鍵。

  • 沒有新增唯一鍵
create table if not exists stu1(
    id int auto_increment primary key,
    name varchar(20) <------ #可以新增重複資料
);
  • 新增唯一鍵
1.新增唯一鍵的第一種方式
create table if not exists stu2(
    id int auto_increment primary key,
    name varchar(20) unique <------#建表時欄位後面新增unique,name不可以新增重複資料
);


2.新增唯一鍵的第二種方式
create table if not exists stu(
    id int auto_increment primary key,
    name varchar(20),
    unique key(name) <------#語句最後新增,name不可以新增重複資料
);


3.新增唯一鍵的第三種方式
create table if not exists stu(
    id int auto_increment primary key,
    name varchar(20)
);
alter table stu add unique(name); <------#建表完成指定唯一鍵


4.新增多個唯一鍵方式
create table if not exists stu11(
    id int auto_increment primary key,
    name varchar(20) unique,
    score int unique
);
  -------此時name和score都是唯一鍵。
  • 刪除唯一鍵
語法
alter table 表名 drop index  唯一鍵欄位名;
示例
alter table stu11 drop index name;