SQL 約束是定義在資料表欄位上的規則,用於限制輸入資料的格式、範圍與關聯性。當資料操作違反約束條件時,資料庫會拒絕該操作並回報錯誤,確保資料的正確性與一致性。約束可在 CREATE TABLE 建表時定義,也可事後透過 ALTER TABLE 新增或移除。
CREATE TABLE table_name ( column_name1 data_type(size) constraint_name, column_name2 data_type(size) constraint_name, column_name3 data_type(size) constraint_name, ... );
| 約束類型 | 功能描述 | 典型應用場景 |
|---|---|---|
| NOT NULL | 欄位不接受 NULL 值 | 必填欄位:身分證字號、Email、訂單日期 |
| UNIQUE | 確保欄位值唯一(可為 NULL) | 帳號、手機號、序號等不可重複欄位 |
| PRIMARY KEY | NOT NULL + UNIQUE,表的唯一識別碼 | 每張表的主鍵:ID、流水號、複合鍵 |
| FOREIGN KEY | 維護參考完整性,值必須存在於參考表 | 訂單的 CustomerID 參考 Customers 表 |
| CHECK | 限制欄位值符合特定條件 | 年齡 > 0、薪資範圍、狀態碼在枚舉值內 |
| DEFAULT | 未指定值時自動填入預設值 | 建立時間 DEFAULT CURRENT_TIMESTAMP、狀態預設 '啟用' |
建議為每個約束指定有意義的名稱,格式建議:{前綴}_{表名}_{欄位名},例如:
pk_Orders_OrderIDfk_Orders_CustomerIDuk_Users_Emailck_Products_Price_Positive命名約束便於後續 ALTER TABLE ... DROP CONSTRAINT 精確移除,也利於錯誤訊息閱讀。
本文為總覽,各約束的詳細語法、跨資料庫差異與進階用法請參考後續各專題文章。