MySQL列屬性 之 唯一鍵
唯一鍵
唯一鍵:每張表往往有多個字段需要具有唯一性,數據不能重復,但是在每張表中,只能有一個主鍵,因此 唯一鍵就是用來解決表中多個字段需要具有唯一性的問題。
例如身份證號碼應該每一行的記錄不一樣,需要具有唯一性。
唯一鍵的本質與主鍵差不多,唯一鍵允許字段為空,而且可以多個字段為空,因此空字段不參與唯一性的比較。也就是說可以插入多個空字段。
增加唯一鍵
增加唯一鍵的方法和主鍵類似,有 3 種方法,分別為:
第一種:在創建表的時候,字段后面直接添加unique或者unique key關鍵字
-- 增加唯一鍵
create table my_unique(
number char(10) unique comment '學號',
name varchar(20) not null
)charset utf8;
第 2 種:在所有字段之后,增加unique key(字段列表),可以設置復合唯一鍵
-- 測試唯一鍵
create table my_unique2(
number char(10) not null,
name varchar(20) not null,
unique key(number)
)charset utf8;
觀察上圖,咱們可能會發現一個問題,那就是: 咱們設置的唯一鍵UNI,怎么變成了主鍵PRI啊?這是由于當唯一鍵滿足非空條件的時候,其性質就和主鍵一樣啦,因此在表中顯示為PRI. 當然,在咱們執行如下 SQL 語句的時候,其就會表現出真正的性質:
-- 查看表創建語句
show create table my_unique2;
第 3 種:在創建表之后,增加唯一鍵
-- 創建未設置唯一鍵的表
create table my_unique3(
id int primary key auto_increment,
number char(10) not null,
name varchar(20) not null
)charset utf8;
如上圖所示,表my_unique3未設置唯一鍵。接下來,執行如下 SQL 語句,進行測試:
-- 增加唯一鍵
alter table my_unique3 add unique key(number);
如上圖所示,咱們已經成功向表中增加唯一鍵啦!
唯一鍵約束:允許多個值為空
唯一鍵與主鍵本質相同,區別在于: 唯一鍵允許字段值為空,并且允許多個空值存在。
-- 測試唯一鍵約束
insert into my_unique values(null,'Charies');
insert into my_unique values(null,'Guo');
更新唯一鍵 & 刪除唯一鍵
在表中,更新唯一鍵的時候,可以不用先刪除唯一鍵,因為表的唯一鍵允許有多個。
刪除唯一鍵的語法為:
基本語法:alter table + 表名 + drop index + 索引名字;
在這里,唯一鍵默認使用字段名作為索引名。
-- 刪除唯一鍵
alter table my_unique3 drop index number;
如上圖所示,顯然咱們已經成功刪除表中的唯一鍵啦!
溫馨提示:符號+表示連接的意思。