約束定義可輸入資料的限制條件,自動維護資料庫完整性。SQL Server 提供五種:
IMAGE、TEXT 型別不可為主鍵CONSTRAINT constraint_name
PRIMARY KEY [CLUSTERED | NONCLUSTERED]
( column_name1 [, column_name2, ..., column_name16] )
constraint_name:資料庫內唯一,省略則系統自動產生CLUSTERED 為預設索引類型CREATE TABLE products (
p_id CHAR(8) NOT NULL,
p_name CHAR(10) NOT NULL,
price MONEY DEFAULT 0.01,
quantity SMALLINT NULL,
CONSTRAINT pk_p_id PRIMARY KEY (p_id, p_name)
) ON [PRIMARY]
ON DELETE/UPDATE { CASCADE | NO ACTION }TEXT/IMAGE 型別,最多 16 欄CONSTRAINT constraint_name
FOREIGN KEY ( column_name1 [, ..., column_name16] )
REFERENCES ref_table [ ( ref_column1 [, ..., ref_column16] ) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]
REFERENCES 指定被參考資料表CHECK (age >= 18 AND age <= 100)DEFAULT GETDATE()、DEFAULT 0CREATE TABLE order_details (
order_id INT NOT NULL,
product_id INT NOT NULL,
qty SMALLINT NOT NULL DEFAULT 1 CHECK (qty > 0),
unit_price MONEY NOT NULL CHECK (unit_price >= 0),
CONSTRAINT pk_od PRIMARY KEY (order_id, product_id),
CONSTRAINT fk_od_order FOREIGN KEY (order_id) REFERENCES orders(order_id),
CONSTRAINT fk_od_prod FOREIGN KEY (product_id) REFERENCES products(product_id),
CONSTRAINT uq_od_unique UNIQUE (order_id, product_id) -- 實際上 PK 已隱含
)
pk_, fk_, ck_, df_, uq_ 前綴)利於維護ON DELETE CASCADE 或 NO ACTION 明確語意DBCC CHECKCONSTRAINTS 驗證現有資料合規性