約束介紹
在給表中插入或者更新資料時,必須滿足約束,否則,操作將失敗。
約束可以在建立表時規定,或者建立表後規定(使用 Alter Table 語句建立約束)。
約束分為列級和表級。
常用的約束包含:not null、unique、primary key、foreign key、check
not null:指定列不能儲存 null 值
unique:確保某列的值都是唯一的。
primary key:not null 和 unique 的結合。確保某列有唯一標識,且不能為 null。null 和沒有資料不同,null 代表著未知資料。
foreign key:保證一個表中的資料匹配另一個表中的值的參照完整性。
check:保證列中的值符合一定條件。
下面列舉一些示例更好的理解各個約束:
1、not null
建立表時,如果不指定約束,預設值為 NULL,意味著可以插入空值。如果不想存在 null 值,需要為該列定義 not null 約束
MogDB=# CREATE TABLE staff(
ID INT NOT NULL,
NAME char(8) NOT NULL,
AGE INT ,
ADDRESS CHAR(50),
SALARY REAL
);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(#
CREATE TABLE
MogDB=#
2、unique
unique 約束表示表裡的一個欄位或多個欄位的組合必須在全表範圍內唯一,唯一約束認為 null 是互不相等的。意思是一列可以存在多個 null。
MogDB=# CREATE TABLE staff1(
ID INT NOT NULL,
NAME char(8) NOT NULL,
AGE INT NOT NULL UNIQUE ,
ADDRESS CHAR(50),
SALARY REAL
);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(#
NOTICE: CREATE TABLE / UNIQUE will create implicit index "staff1_age_key" for table "staff1"
CREATE TABLE
MogDB=#
3、primary key
主鍵是資料表中每一條記錄的唯一標識。
MogDB=# CREATE TABLE staff2(
ID INT PRIMARY KEY ,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(#
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff2_pkey" for table "staff2"
CREATE TABLE
MogDB=#
4、foreign key
外來鍵約束指一個表中的某個資料必須匹配另一個表中的某個資料。透過要給表的外來鍵指向另一個表的唯一約束的鍵。
如下表所示,表 staff3 包含 5 個欄位,表 DEPARTMENT 包含 3 個欄位,其中 EMP_ID 為外來鍵,參照 staff3 表的 ID 欄位。
MogDB=# CREATE TABLE staff3(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL
);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(#
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff3_pkey" for table "staff3"
CREATE TABLE
MogDB=# CREATE TABLE DEPARTMENT(
ID INT PRIMARY KEY NOT NULL,
DEPT CHAR(50) NOT NULL,
EMP_ID INT references staff3(ID)
);MogDB(# MogDB(# MogDB(# MogDB(#
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "department_pkey" for table "department"
CREATE TABLE
MogDB=#
5、check
check 約束表示,每次插入的資料必須使表示式結果為真或未知,才能插入成功。
MogDB=# CREATE TABLE staff4(
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL CHECK(SALARY > 0)
);MogDB(# MogDB(# MogDB(# MogDB(# MogDB(# MogDB(#
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "staff4_pkey" for table "staff4"
CREATE TABLE
MogDB=#