1. 程式人生 > >PostgreSQL的約束

PostgreSQL的約束

打折 一個 words person roman 數據 關鍵詞 gpo div

約束類型:檢查約束、非空約束、唯一約束、主鍵、外鍵

1. 檢查約束

設置某個字段裏的數值必須滿足約束表達式的條件。

例:限制人的年齡在0~120之間,語句如下:

create table person(name varchar(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(name varchar(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_unique UNIQUE,

name text,

price numeric

);

PostgreSQL的約束