MS SQL Server 中的檢查約束


簡介

SQL Server 是一款功能強大的關係資料庫管理系統,廣泛應用於各個行業。SQL Server 的關鍵特性之一是能夠對資料強制實施約束,以確保資料完整性和一致性。檢查約束就是其中一種約束,它允許使用者指定一個布林表示式,該表示式必須對插入或更新到特定列或表中的任何資料求值為真。在本文中,我們將討論 SQL Server 中檢查約束的概念,如何建立和實現它們,以及它們在現實世界中的應用示例。

什麼是檢查約束?

檢查約束是在 SQL Server 資料庫中特定列或表上定義的規則。它用於限制可以插入或更新到該列或表中的值。檢查約束是一個布林表示式,對於任何插入或更新的資料,該表示式都必須求值為真。如果表示式的值為假,則資料插入或更新將失敗,並顯示錯誤訊息。

例如,如果我們有一個名為“Employees”的表,其中包含一個名為“Age”的列,我們可能希望確保沒有員工的年齡小於 18 歲或大於 65 歲。我們可以透過建立一個檢查約束來實現這一點,該約束指定 Age 列必須介於 18 和 65 之間。任何不符合此條件的資料插入或更新都將被拒絕。

建立檢查約束

可以使用 SQL Server 中的 ALTER TABLE 語句建立檢查約束。建立檢查約束的基本語法如下:

ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (Boolean_expression)

例如,要在 Employees 表的 Age 列上建立一個檢查約束,我們將使用以下 SQL 語句:

ALTER TABLE Employees ADD CONSTRAINT AgeCheck CHECK (Age >= 18 AND Age <= 65)

這會在 Employees 表上建立一個名為“AgeCheck”的檢查約束,確保插入或更新到 Age 列中的任何資料必須介於 18 和 65 之間。

實現檢查約束

建立檢查約束後,每當向指定的列或表中插入或更新資料時,SQL Server 將自動強制執行該約束。如果檢查約束中的布林表示式求值為假,則資料插入或更新將失敗,並顯示錯誤訊息。

例如,如果我們嘗試將年齡為 17 歲的新的員工插入到 Employees 表中,將顯示以下錯誤訊息:

The INSERT statement conflicted with the CHECK constraint "AgeCheck". The conflict occurred in database "database_name", table "dbo.Employees", column 'Age'. The statement has been terminated.

也可以使用 ALTER TABLE 語句停用和重新啟用檢查約束。要停用檢查約束,請使用以下語法:

ALTER TABLE table_name NOCHECK CONSTRAINT constraint_name

要重新啟用停用的檢查約束,請使用以下語法:

ALTER TABLE table_name CHECK CONSTRAINT constraint_name

現實世界中的例子

檢查約束是確保 SQL Server 資料庫中資料完整性和一致性的強大工具。以下是一些如何在現實世界場景中使用它們的示例:

在財務資料庫中,可以使用檢查約束來確保所有交易金額都是正數。

  • 在人力資源資料庫中,可以使用檢查約束來確保所有員工的薪水都在某個範圍內。

  • 在零售資料庫中,可以使用檢查約束來確保所有產品價格都高於某個金額。

  • 在醫療保健資料庫中,可以使用檢查約束來確保所有患者的年齡都高於某個年齡。

其他需要考慮的主題

  • 將檢查約束與多列一起使用 - 在某些情況下,您可能需要建立一個涉及表中多列的檢查約束。例如,在訂單表中,您可能希望確保訂購的數量小於庫存數量。這可以透過建立一個引用訂購數量和庫存數量列的檢查約束來實現。

  • 使用子查詢建立檢查約束 - 也可以使用子查詢建立檢查約束,以將要插入或更新的值與其他表中的值進行比較。這對於強制執行涉及多個表的複雜資料完整性規則非常有用。

  • 效能注意事項 - 請記住,每次插入或更新新行時都會評估檢查約束,因此務必確保檢查約束中的布林表示式儘可能高效。例如,使用索引可以提高檢查約束的效能。

  • 將檢查約束與其他約束結合使用:檢查約束可以與其他約束(例如主鍵和外部索引鍵約束)結合使用,以提供多層資料完整性和一致性。

  • 使用檢查約束進行資料驗證 - 檢查約束也可以用於應用程式中的資料驗證目的,例如,您可以使用檢查約束來驗證表單中使用者的輸入。

  • 管理檢查約束 - 作為資料庫管理員,您可能需要管理現有的檢查約束,例如停用或重新啟用它們,修改它們的定義或刪除它們。

  • 處理錯誤 - 當違反檢查約束時,會引發錯誤。您可以使用 TRY-CATCH 塊來處理此錯誤,它允許您處理錯誤並向用戶提供有意義的訊息。

結論

檢查約束是用於在 SQL Server 資料庫中強制執行資料完整性和一致性的寶貴工具。它們允許使用者指定一個布林表示式,該表示式必須對插入或更新到特定列或表中的任何資料求值為真。這可以用於確保資料滿足某些條件,例如在某個範圍內或具有某個值。通過了解如何在 SQL Server 中建立和實現檢查約束,開發人員可以確保他們的資料庫免受不良資料的侵害並保持高質量的資料。

更新於:2023年1月16日

709 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.