五大約束類型速查
| 約束 | 功能 | 關鍵字 |
| 主鍵 | 唯一 + 不可為 NULL,唯一識別每列 | PRIMARY KEY |
| 唯一 | 唯一,允許單一 NULL | UNIQUE |
| 檢查 | 限制欄位值域/格式(如年齡、Email 格式) | CHECK |
| 預設 | 未指定值時自動填入預設值 | DEFAULT |
| 外鍵 | 建立兩表參考關聯,維護參考完整性 | FOREIGN KEY |
新增約束語法(ALTER TABLE ... ADD CONSTRAINT)
-- 主鍵
ALTER TABLE TableName ADD CONSTRAINT PK_ColName PRIMARY KEY (ColName);
-- 唯一
ALTER TABLE TableName ADD CONSTRAINT UQ_ColName UNIQUE (ColName);
-- 預設
ALTER TABLE TableName ADD CONSTRAINT DF_ColName DEFAULT ('未知地址') FOR ColName;
-- 檢查(年齡 12~15)
ALTER TABLE TableName ADD CONSTRAINT CK_ColName CHECK (ColName BETWEEN 12 AND 15);
-- 外鍵
ALTER TABLE TableName ADD CONSTRAINT FK_ColName
FOREIGN KEY (ColName) REFERENCES RefTableName (RefColName);
刪除約束語法
ALTER TABLE TableName DROP CONSTRAINT 約束名稱;
命名慣例建議
| 類型 | 前綴 | 範例 |
| 主鍵 | PK_ | PK_Employee_ID |
| 唯一 | UQ_ | UQ_Employee_Email |
| 檢查 | CK_ | CK_Employee_Age_Range |
| 預設 | DF_ | DF_Employee_HireDate |
| 外鍵 | FK_ | FK_Employee_Department |
建立登入帳戶與資料庫使用者
-- 建立 Windows 驗證登入
EXEC sp_grantlogin 'DOMAIN\UserName';
-- 在資料庫中建立使用者對應登入
EXEC sp_grantdbaccess 'DOMAIN\UserName', 'DBUserName';
-- 授權(範例:db_owner)
EXEC sp_addrolemember 'db_owner', 'DBUserName';
現代做法(SQL Server 2012+):請改用 CREATE LOGIN、CREATE USER、ALTER ROLE ... ADD MEMBER,sp_grantlogin 等舊程序已淘汰。
預設約束實務說明
- 適用於「大多數列值相同」的欄位(如
Country DEFAULT 'TW'、IsActive DEFAULT 1)。
- 插入時略過該欄位或指定
DEFAULT 關鍵字即自動套用:INSERT INTO T (Col1) VALUES (DEFAULT);
- 不佔用額外儲存空間(中繼資料中記錄預設值)。
企業管理員圖形化操作對應
- 企業管理員 → 安全性 → 登入 → 右鍵「新增登入」。
- 填寫名稱、密碼(SQL 驗證)或選擇 Windows 驗證。
- 「資料庫存取」索引標籤勾選目標資料庫。
- 「資料庫角色」勾選
db_owner 或自訂角色。