主鍵(primary key)和唯一鍵(unique) 知識點總結
阿新 • • 發佈:2021-02-05
主鍵(Primary key)
- 概念
主鍵用於唯一標識表中的每一條資料。
- 主鍵的特徵:
不能重複, 不能為空。
- 示例
create table stu1(
id int auto_increment primary key, <------#主鍵
name varchar(20)
);
注意點:
auto_increment的欄位必須是主鍵, 但是主鍵不一定是auto_increment的。
一個表只能有一個主鍵, 但是主鍵可以是1個或多個欄位組成。
- auto_increment 自增長
- 自增長欄位的值從1開始, 每次遞增1。
- 自增長欄位資料不可以重複, 合適生成唯一的id。
- 自增長欄位可以使用null或者default來設定值。
- 自增長欄位必須是主鍵 (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;