约束介绍
在给表中插入或者更新数据时,必须满足约束,否则,操作将失败。
约束可以在创建表时规定,或者创建表后规定(使用 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=#