- MySQL入門很輕松(微課超值版)
- 云尚科技
- 1000字
- 2020-09-18 11:30:50
5.5 唯一性約束

當表中除主鍵列外,還有其他字段需要保證取值不重復時,可以使用唯一性約束。盡管唯一性約束與主鍵約束都具有強制唯一性,但對于非主鍵字段應使用唯一性約束,而非主鍵約束,唯一性約束也被稱為UNIQUE約束。
5.5.1 創(chuàng)建表時添加唯一性約束
在MySQL中,創(chuàng)建唯一性約束比較簡單,只需要在列的數(shù)據(jù)類型后面加上UNIQUE關鍵字就可以了。創(chuàng)建表時添加唯一性約束的語法格式如下:

主要參數(shù)介紹如下。
- UNIQUE:UNIQUE約束的關鍵字。
【實例12】在test數(shù)據(jù)庫中,定義數(shù)據(jù)表empinfo,將員工名稱列設置為UNIQUE約束。輸入如下SQL語句:

單擊“執(zhí)行”按鈕,即可完成添加唯一性約束的操作,如圖5-25所示。執(zhí)行完成后,使用“DESC empinfo;”語句即可看到該數(shù)據(jù)表的結構,在其中可以查看創(chuàng)建的唯一性約束,如圖5-26所示。
注意:一個表中可以有多個字段聲明為UNIQUE,但只能有一個PRIMARY KEY聲明;聲明為PRIMAY KEY的列不允許有空值,但是聲明為UNIQUE的字段允許空值(NULL)的存在。

圖5-25 添加UNIQUE約束

圖5-26 查看添加的UNIQUE約束
5.5.2 修改表時添加唯一性約束
修改表時添加唯一性約束的方法只有一種,而且在添加唯一性約束時,需要保證添加唯一性約束的列中存放的值沒有重復的。修改表時添加唯一性約束的語法格式如下:
ALTER TABLE table_name ADD CONSTRAINT uq_name UNIQUE(col_name);
主要參數(shù)介紹如下。
- table_name:表名,它是要添加唯一性約束列所在的表名。
- CONSTRAINT uq_name:添加名為uq_name的約束。該語句可以省略,省略后系統(tǒng)會為添加的約束自動生成一個名字。
- UNIQUE(col_name):唯一性約束的定義,UNIQUE是唯一性約束的關鍵字,col_name是唯一性約束的列名。如果想要同時為多個列設置唯一性約束,就要省略掉唯一性約束的名字,名字由系統(tǒng)自動生成。
【實例13】如果在創(chuàng)建empinfo時沒有添加唯一性約束,現(xiàn)在需要給empinfo表中的名稱列添加唯一性約束。輸入如下SQL語句:
ALTER TABLE empinfo ADD CONSTRAINT uq_empinfo_name UNIQUE(name);
單擊“執(zhí)行”按鈕,即可完成添加唯一性約束的操作,如圖5-27所示。
執(zhí)行完成后,使用“DESC empinfo;”語句即可看到該數(shù)據(jù)表的結構,在其中可以查看添加的唯一性約束,如圖5-28所示。

圖5-27 執(zhí)行SQL語句

圖5-28 “索引/鍵”對話框
5.5.3 刪除表中的唯一性約束
任何一個約束都是可以被刪除的,刪除唯一性約束的方法很簡單,具體的語法格式如下:
ALTER TABLE table_name DROP [INDEX|KEY] index_name;
主要參數(shù)介紹如下。
- table_name:表名。
- index_name:添加唯一約束的名稱。
【實例14】刪除empinfo表中名稱列的唯一性約束。輸入如下SQL語句:
ALTER TABLE empinfo DROP INDEX name;
單擊“執(zhí)行”按鈕,即可完成刪除UNIQUE約束的操作,如圖5-29所示。
執(zhí)行完成后,使用“DESC empinfo;”語句即可看到該數(shù)據(jù)表的結構,在其中可以查看添加的唯一性約束被刪除,如圖5-30所示。

圖5-29 刪除唯一約束

圖5-30 刪除用戶名稱列的唯一約束
- Learning PostgreSQL
- Game Programming Using Qt Beginner's Guide
- Elastic Stack應用寶典
- Hands-On JavaScript High Performance
- TypeScript圖形渲染實戰(zhàn):基于WebGL的3D架構與實現(xiàn)
- 從0到1:Python數(shù)據(jù)分析
- RISC-V體系結構編程與實踐(第2版)
- Learning Nessus for Penetration Testing
- CodeIgniter Web Application Blueprints
- IPython Interactive Computing and Visualization Cookbook
- R的極客理想:量化投資篇
- HTML5 Canvas核心技術:圖形、動畫與游戲開發(fā)
- 零基礎PHP從入門到精通
- Learning Node.js for Mobile Application Development
- MySQL數(shù)據(jù)庫應用技術及實戰(zhàn)