PostgreSQL上面可以對table上每一行的各個資料欄位進行設定,來規範裡面所存的數值。例如"該欄位的值是否有定義?" "該欄位的值和其他行的相同欄位相比是否獨特?"以及"欄位數值的大小是否符合特定條件?"
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50),
price INTEGER NOT NULL,
weight INTEGER
);
或者在table建立之後透過ALTER TABLE指令來添加
ALTER TABLE products
ALTER COLUMN price
SET NOT NULL;
指令下去之後,如果之後對table的操作會破壞此限制,像是往products table插入price為空的值,或者在ALTER TABLE之前有不符合NOT NULL限制的資料行,都會出現錯誤的訊息。
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
department VARCHAR(50) NOT NULL,
price INTEGER DEFAULT 999,
weight INTEGER
);
或者在table建立之後透過ALTER TABLE指令來添加
ALTER TABLE products
ALTER COLUMN price
SET DEFAULT 999;
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL UNIQUE,
department VARCHAR(50) NOT NULL,
price INTEGER DEFAULT 999,
weight INTEGER
);
或者在table建立之後透過ALTER TABLE指令來添加
ALTER TABLE products
ADD UNIQUE(name);
指令下去之後,如果之後對table的操作會破壞此限制,像是往products table插入的資料行其name欄位內容在table中其他資料行已出現過,或者在ALTER TABLE之前有上述情形發生,都會出現錯誤的訊息。
我們也可以針對多個欄位建立UNIQUE constraint,像是如果要針對name跟department兩個欄位建立UNIQUE CONSTRAINT,在table建立時可以輸入
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50) NOT NULL,
price INTEGER DEFAULT 999,
weight INTEGER,
UNIQUE (name, department)
);
或者在table建立之後透過ALTER TABLE指令來添加
ALTER TABLE products
ADD UNIQUE(name, department);
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(50) NOT NULL,
department VARCHAR(50) NOT NULL,
price INTEGER CHECK(price > 0),
weight INTEGER
);
或者在table建立之後透過ALTER TABLE指令來添加
ALTER TABLE products
ADD CHECK(price > 0);
這樣子設定完成之後,如果之後對table的操作會讓小於0的資料在price欄位中出現,資料庫就會回傳錯誤的訊息而無法完成動作。
CHECK constraint也可以針對多個欄位進行比較,例如以下CREATE TABLE指令
CREATE TABLE orders(
id SERIAL PRIMARY KEY,
name VARCHAR(40) NOT NULL,
created_at TIMESTAMP NOT NULL,
est_delivery TIMESTAMP NOT NULL,
CHECK(created_at < est_delivery)
);
可以確保資料庫中同一行created_at創建日期不會大於est_delivery預計送達日期。