首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 資料庫完整性約束完整指南:主鍵、外鍵與使用者定義約束

     編輯:關於SqlServer

在關聯式資料庫設計中,完整性約束是確保資料準確性、一致性與可靠性的核心機制。SQL Server 提供了三大類完整性約束:實體完整性、參考完整性與使用者定義完整性。本文將系統整理這些約束的建立、修改與刪除語法,並附上實戰範例,協助開發人員快速掌握資料庫約束的核心操作。

一、實體完整性:主鍵約束

主鍵唯一識別資料表中的每一筆記錄,不允許重複值與 NULL 值。主要有兩種建立方式:

1. 建表時直接定義主鍵

CREATE TABLE 表名
(
    Sno INT IDENTITY(1,1),
    Sname NVARCHAR(20),
    -- 設定主鍵
    PRIMARY KEY (Sno)
);

2. 事後透過 ALTER TABLE 新增主鍵

ALTER TABLE 表名
ADD CONSTRAINT PK_表名_Sno
PRIMARY KEY (id);

二、參考完整性:外鍵約束

外鍵建立資料表之間的關聯,確保參考資料的存在性。支援串聯刪除與串聯更新等進階選項。

1. 建表時定義外鍵

CREATE TABLE 表名
(
    sno INT IDENTITY(1,1) PRIMARY KEY,
    cno INT NOT NULL,
    FOREIGN KEY (cno) REFERENCES 表名2(Cno)
        ON DELETE CASCADE   -- 串聯刪除
        ON UPDATE CASCADE   -- 串聯更新
        -- ON DELETE NO ACTION  刪除限制
);

2. 事後新增外鍵

ALTER TABLE 表名
ADD CONSTRAINT FK_表名_表名2
FOREIGN KEY (cid) REFERENCES 表名2(cid);

三、使用者定義完整性

針對特定業務規則自訂的約束條件,包含四大類型:

1. 非空約束 (NOT NULL)

ALTER TABLE 表名
ALTER COLUMN name VARCHAR(20) NOT NULL;

2. 唯一約束 (UNIQUE)

ALTER TABLE 表名
ADD CONSTRAINT UQ_表名_列名 UNIQUE(列);

3. 檢查約束 (CHECK)

ALTER TABLE 表名
ADD CONSTRAINT CK_表名_列名 CHECK(age > 5);

4. 預設約束 (DEFAULT)

ALTER TABLE 表名
ADD CONSTRAINT DF_表名_列名 DEFAULT('男') FOR gender;

四、刪除約束

當約束不再需要時,可透過以下語法移除:

ALTER TABLE 表名 DROP CONSTRAINT DF_表名_列;

最佳實務建議

  • 命名約束時採用一致的命名慣例(如 PK_、FK_、UQ_、CK_、DF_ 前綴),便於維護與除錯。
  • 外鍵的串聯操作(CASCADE)需謹慎使用,避免非預期的大量資料變更。
  • 大量資料匯入前可暫時停用約束,完成後再重新啟用以提升效能。

掌握完整性約束的靈活運用,能從資料庫層面有效攔截髒資料,減少應用層的驗證邏輯,是資料庫設計與維護的必備技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved