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

4.3 操作數據約束

通常在設計一張數據表的時候不僅要對表中所用字段和內容進行考慮,還有一個更加重要的問題,就是對數據完整性的設計。數據完整性是指數據的精確性和可靠性,防止表中出現不符合既定設置的數據(非法數據)。這些數據可能是用戶沒有根據規則輸入的數據,也可能是黑客對于數據庫破解所做出的一些特定嘗試,確保數據的完整性對于整個數據庫系統而言是非常重要的。

在SQL Server 2016中,通常會通過約束的形式來對數據表進行完整性的設置,主要的約束方式分為5種,分別是:主鍵約束(primary key constraint)、唯一性約束(unique constraint)、檢查約束(check constraint)、默認約束(default constraint)和外鍵約束(foreign key constraint)。

4.3.1 用主鍵約束防止無效數據

主鍵約束指的是可以在表中定義一個字段作為表的主要關鍵字,主鍵是表中記錄的唯一性標識,每個表中只允許一個PRIMARY KEY約束,并且作為PRIMARY KEY約束的字段不允許空值。若在一個表中有多個列作為主鍵約束,則一列中的值可以是重復的,但是被主鍵約束列中的組合值一定要是唯一存在的。

在SQL Server 2016中添加約束的方法主要有兩種,一種是通過對象資源管理器來創建,還有一種則是使用T-SQL語句來創建。

使用對象資源管理器對學生選課數據庫(xsxk)中的學生表(dbo.xs)中的學號字段進行PRIMARY KEY的設定,具體操作如下:

步驟01 在【資源管理器】中展開xsxk數據庫,右擊dbo.xs數據表,選擇【設計】,在表設計窗口中右擊【學號】字段,在彈出的快捷菜單中選擇【設置主鍵】命令,如圖4.17所示。

步驟02 主鍵設置完成后,學號所在字段會有一把鑰匙的小圖標,表示該字段為表的主鍵列,如圖4.18所示。

圖4.17 選擇【設置主鍵】命令

圖4.18 主鍵列【學號】

當某列設置為主鍵時,不允許為空,也不能有重復值。

4.3.2 用唯一性約束防止重復數據

唯一性約束(UNIQUE)可以確保數據表在主鍵列中字段的唯一性。保證其中的數值只出現一次,而不會出現重復的現象。例如,在員工信息表中需要錄入所有員工的手機號碼,然而并不可能有兩位員工的手機號碼是相同的,此時我們可以對手機號碼字段進行唯一性約束的設置。在SQL Server 2016中可以對一個表中的多個字段進行UNIQUE約束,在使用UNIQUE時需要注意以下幾點要素:

● UNIQUE約束是允許空值的。

● UNIQUE約束可以在一個數據表中設立多個。

● 使用了UNIQUE約束的字段會建立唯一性索引。

● 在默認的情況下,UNIQUE約束創建的是非聚集索引。

使用對象資源管理器對姓名字段進行UNIQUE約束操作的步驟如下:

步驟01 在【資源管理器】中展開xsxk數據庫,右擊dbo.xs數據表,選擇【設計】命令,在表設計窗口中右擊【姓名】字段,在彈出的快捷菜單中選擇【索引/鍵】命令,如圖4.19所示。

圖4.19 選擇【索引/鍵】命令

步驟02 在【索引/鍵】對話框中,單擊【添加】按鈕,添加一個唯一性約束,如圖4.20所示。

圖4.20 增加新索引

步驟03 選中新建的IX_xs索引,單擊列邊上的按鈕,在彈出的下拉列表中選擇【姓名】字段,如圖4.21所示。

圖4.21 選擇【姓名】字段

步驟04 設置完成后,單擊【確定】按鈕完成操作。

4.3.3 檢查約束

檢查約束是對錄入到數據表中的數據所設置的檢查條件,以限制輸入值,用于保證數據庫的完整性。通過邏輯表達式來對字段的值進行輸入內容的限定,例如在員工表中定義了一個age字段,我們需要把這個字段所錄入的內容限定在一個合理及合法的范圍內,比如18~70歲,可以通過邏輯表達式age>=18 AND age<=70來進行判斷,邏輯表達式會返回TRUE或FALSE兩個值,用來表示符合約束條件和不符合約束條件兩種情況。通常在使用檢查約束時,需要注意以下幾點:

● 在對列進行約束限制時,只能與字段有關;在對表進行約束限定時,只能與限制表中的字段有關。

● 在數據表中可以對多個列進行檢查約束的設置。

● 在使用CREATE TABLE時,只能對每個字段設置一個檢查約束。

● 若在表中對多個字段進行檢查約束,則為表級約束。

● 檢查約束將在數據表進行INSERT和UPDATE操作時對數據進行驗證。

● 設置檢查約束的時候不能包含子查詢。

使用對象資源管理器對學生選課數據庫(xsxk)中的學生表(dbo.xs)中的性別字段進行檢查約束的設定,要求只能輸入“男”或“女”,具體操作步驟如下:

步驟01 在【資源管理器】中展開xsxk數據庫,右擊dbo.xs數據表,選擇【設計】命令,在表設計窗口中右擊【性別】字段,在彈出的快捷菜單中選擇【檢查約束】命令,如圖4.22所示。

圖4.22 選擇【檢查約束】命令

步驟02 在彈出的對話框中單擊【添加】按鈕,增加一條新的條件約束,如圖4.23所示。

圖4.23 添加新的檢查約束

步驟03 選中新建的約束,在【表達式】中輸入條件表達式([性別]='男' OR [性別]='女'),如圖4.24所示。

圖4.24 輸入條件表達式

包括隱式或顯式數據類型轉換的約束可能會導致某些操作失敗。例如,為表定義的作為分區切換的源的此類約束可能會導致ALTER TABLE…SWITCH操作失敗。在約束定義中避免數據類型轉換。

4.3.4 默認約束

默認約束是指當某一字段沒有提供數據內容時,系統自動給該字段賦予一個設定好的值。當必須向表中加載一行數據但不知道某一字段值的值或該值不存在時,可以使用默認約束。默認約束可以使用常量、函數、空值作為默認值。使用默認約束時,需要注意以下幾點:

● 每個字段只能有一個默認約束。

● 若默認約束設置的值大于字段所允許的長度,則截取到字段允許長度。

● 不能加入到帶有IDENTITY屬性或TIMESTAMP的字段上。

● 若字段的數據類型為用戶自定義類型,而且已有默認值綁定在此數據類型上,則不允許再次使用默認值。

4.3.5 外鍵約束

外鍵約束是在兩個表中的數據之間建立和加強鏈接的一列或多列的組合,可控制在外鍵表中存儲的數據。在外鍵引用中,當包含一個表的主鍵值的一個或多個列被另一個表中的一個或多個列引用時,就在這兩個表之間創建了鏈接。使用外鍵約束需要注意以下幾點:

● 外鍵約束是對字段參照完整性的設置。

● 外鍵約束不支持自動創建索引,需要手動建立。

● 表中最多可以使用31個外鍵約束。

● 臨時表中不能建立外鍵約束。

● 主鍵和外鍵的數據類型必須嚴格匹配。

主站蜘蛛池模板: 巫山县| 河北省| 庆阳市| 禄丰县| 苏尼特左旗| 晋州市| 普兰店市| 商南县| 尉犁县| 牙克石市| 宿迁市| 阿拉善右旗| 馆陶县| 抚远县| 洪泽县| 浙江省| 涿州市| 柞水县| 嘉鱼县| 五指山市| 乐山市| 枝江市| 土默特右旗| 宝山区| 章丘市| 鱼台县| 江陵县| 积石山| 息烽县| 辽中县| 武城县| 秦安县| 盱眙县| 峡江县| 纳雍县| 法库县| 淅川县| 唐山市| 舟曲县| 乳源| 达拉特旗|