如果資料庫中的某張table的某個欄位有條件上的限制,除了可以在程式中做判斷之外,也可以使用 Check Constraints
這個功能,就可以在新增或更新資料的時候,檢查資料是否符合預期。如果只針對單一欄位做限制,可以在該欄位後面加上 CHECK
這個keyword,並在 CHECK
後面加上限制的條件。
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0)
);
這樣在 INSERT
和 UPDATE
的時候,資料庫就會檢查資料合不合法,不合法會立刻吐出錯誤訊息。
從上面的範例可以看到,PostgreSQL自動的把 CHECK
的名稱叫做 products_price_check
,但如果我們想要自己取名,可以在 CHECK
前面加上 CONSTRAINT
和名稱,就可以替這個 CHECK
定義名稱。
CREATE TABLE products (
product_no integer,
name text,
price numeric CONSTRAINT positive_price CHECK (price > 0)
);
新增完之後,就可以在Constraints裡面看到剛才新增的 positive_price
。
除了可以針對單一欄位設 Check Constraints,也可以針對多個欄位設置條件,只要把 CHECK
跟欄位並行放置,就可以對多個欄位設置Constraints,甚至還可以設定多個條件。
CREATE TABLE products (
product_no integer,
name text,
price numeric CHECK (price > 0),
discounted_price numeric CHECK (discounted_price > 0),
CHECK (discounted_price > 0 AND price > discounted_price)
);
今天就先介紹到這邊,明天來談談Check Constraints的使用注意事項和範例。