標籤:table ble name height oracle sql person integer gre
約束類型:檢查約束、非空約束、唯一約束、主鍵、外鍵
1. 檢查約束
設定某個欄位裡的數值必須滿足約束運算式的條件。
例:限制人的年齡在0~120之間,語句如下:
create table person(namevarchar(40),age int check (age >=0 and age<=120));
insert into person values(‘name1‘,120);
insert into person values(‘name1‘,121);
執行結果如下,年齡欄位超過120報錯,提示受“person_age_check”的限制。
指定約束的名稱,需要使用關鍵詞“constraint”,樣本如下
create table person(namevarchar(40),age int constraint age_chk check(age >=0 and age<=120));
一個檢查約束可以引用多個列,例如:儲存商品平常價格和打折價格,而打折價格低於平常價格,樣本如下
create table products (
product_no integer,
name text,
price numeric check (price > 0),
dazhe_price numeric check (dazhe_price > 0),
constraint dazhe_price_chk check (price >dazhe_price)
);
在上面的例子中,針對價格(price > 0)和打折後價格(dazhe_price > 0)的約束稱為列約束,這兩個約束依附於特定的列,但第三個約束(price >dazhe_price)獨立於任何一個列定義,稱為資料表條件約束。
執行結果如下:
註:oracle下,檢查約束可以禁用,但在PostgreSQL下卻不可以禁用。
2. 非空約束
非空約束僅僅指定一個列中不會有空值。非空約束等價於檢查約束(column_name is not null)。樣本如下:
create table products (
product_no integer,
name text,
price numeric not null,
dazhe_price numeric check (dazhe_price > 0),
constraint dazhe_price_chk check (price >dazhe_price)
);
3. 唯一約束
唯一約束保證在一列或一組列中儲存的資料是唯一值,樣本如下:
create table products (
product_no integer UNIQUE,
name text,
price numeric
);
為一組列定義一個唯一約束,樣本如下:
create table products (
product_no integer,
name text,
price numeric,
UNIQUE(product_no, price)
);
為唯一約束指定名稱:
create table products (
product_no integer CONSTRAINT pro_no_uniqueUNIQUE,
name text,
price numeric
);
PostgreSQL的約束