MySQL建表唯一性指對(duì)數(shù)據(jù)表的某些列設(shè)置唯一性約束,保證每個(gè)數(shù)據(jù)行在此列上的取值都是唯一的,避免數(shù)據(jù)重復(fù)。
CREATE TABLE user_info( id INT(11) NOT NULL AUTO_INCREMENT, username VARCHAR(50) NOT NULL UNIQUE, password VARCHAR(50) NOT NULL, email VARCHAR(50) NOT NULL UNIQUE, PRIMARY KEY (id) );
上述代碼中,user_info表的username和email兩個(gè)字段都設(shè)置了唯一性約束(UNIQUE),確保用戶輸入的用戶名和郵箱在全表中都是唯一的,不會(huì)重復(fù)。如果某個(gè)用戶嘗試輸入重復(fù)的用戶名或郵箱,MySQL將會(huì)報(bào)出錯(cuò)誤。
使用唯一性約束有以下幾個(gè)優(yōu)點(diǎn):
- 避免數(shù)據(jù)沖突:唯一性約束可以在表層面上避免重復(fù)數(shù)據(jù)的出現(xiàn),保證數(shù)據(jù)的有效性。
- 提升查詢速度:唯一性約束可以在查詢時(shí)加快數(shù)據(jù)的查找速度,減少重復(fù)數(shù)據(jù)的干擾。
- 可通過(guò)約束名稱精準(zhǔn)識(shí)別:使用唯一性約束時(shí),可以為每個(gè)約束取一個(gè)名稱,便于后期維護(hù)。
需要注意的是,唯一性約束只能保證單列數(shù)據(jù)的唯一,如果需要保證多列數(shù)據(jù)的唯一,請(qǐng)使用聯(lián)合唯一性約束。
CREATE TABLE order_info( id INT(11) NOT NULL AUTO_INCREMENT, user_id INT(11) NOT NULL, order_no VARCHAR(50) NOT NULL, PRIMARY KEY (id), UNIQUE KEY (user_id, order_no) );
上述代碼中,order_info表的user_id和order_no兩個(gè)字段構(gòu)成了聯(lián)合唯一性約束,確保相同用戶不能創(chuàng)建相同訂單號(hào)的訂單,同時(shí)避免不同用戶創(chuàng)建相同訂單號(hào)的情況。
在使用唯一性約束時(shí),需要注意以下幾點(diǎn):
- 唯一性約束不支持NULL值,必須在創(chuàng)建字段時(shí)指定NOT NULL。
- 唯一性約束可以在創(chuàng)建表時(shí)添加,也可以通過(guò)ALTER TABLE語(yǔ)句添加。
- 當(dāng)唯一性約束被違反時(shí),MySQL將會(huì)自動(dòng)報(bào)錯(cuò),可以通過(guò)捕獲該錯(cuò)誤進(jìn)行處理。
上一篇mysql建表圖片怎么弄
下一篇mysql建表后添加主鍵