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

PostgreSQL中的約束

    在PostgreSQL中,約束的種類有:

  • 檢查約束
  • 非空約束
  • 唯一約束
  • 主鍵
  • 外來鍵

檢查約束

    檢查約束是最常見的約束型別,使用該約束後,欄位的值就必須使這個約束的表示式為真。使用“CHECK(表示式)”。

 CREATE TABLE books (
  id int  CHECK(id>0),
  name varchar(20),
  price int
);

    可以給約束起一個獨立的名字,方便列印或修改約束資訊,使用“CONSTRAINT 約束名 CHECK(表示式)”。

 CREATE TABLE books (
  id int CONSTRAINT valid_id CHECK(id>0),
  name varchar(20),
  price int
);

    檢查約束可以引用多個欄位,此時使用“表約束”(單個欄位的檢查約束,也可以使用表約束)。

 CREATE TABLE books (
  id int,
  name varchar(20),
  price int,
  CHECK(id>0 and price>0)
);

非空約束

    宣告一個欄位必須不能為NULL,非空約束總是被寫成欄位約束。

 CREATE TABLE books (
  id int NOT NULL,
  name varchar(20),
  price int
);

唯一約束

    保證欄位裡的資料是唯一的。

 CREATE TABLE books (
  id int UNIQUE,
  name varchar(20),
  price int
);

   唯一約束 也可以寫成表約束的形式。

 CREATE TABLE books(
  id int ,
  name varchar(20),
  price int,
  UNIQUE(id)
);

主鍵

 CREATE TABLE books (
  id int PRIMARY KEY,
  name varchar(20),
  price int
);

外來鍵

    外來鍵是表之間的約束,使得表的欄位必須出現在另一個表的欄位中,又稱參照完整性約束。外來鍵約束的形式為:REFERENCES 表名(列名)。

CREATE TABLE student (
  name varchar(20),
  bookId int REFERENCES books(id)
);

總結

    一個欄位可以有多個約束,一個接一個寫就好,它們的順序無所謂。

 CREATE TABLE books (
  id int PRIMARY KEY,
  name varchar(20),
  price int NOT NULL CHECK(price>0) 
);