官术网_书友最值得收藏!

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 刪除用戶名稱列的唯一約束

主站蜘蛛池模板: 建湖县| 和静县| 元氏县| 临沧市| 邓州市| 建湖县| 阿瓦提县| 贵德县| 扶沟县| 抚州市| 长治县| 嵩明县| 阿拉善盟| 罗平县| 东乌珠穆沁旗| 收藏| 建德市| 壤塘县| 蚌埠市| 庆云县| 日土县| 灵寿县| 阿巴嘎旗| 通化市| 万安县| 孟津县| 简阳市| 武汉市| 石渠县| 墨竹工卡县| 淮阳县| 辰溪县| 和田市| 墨竹工卡县| 云南省| 博爱县| 修文县| 民县| 德保县| 蓬溪县| 四川省|