openGauss

开源数据库

openGauss社区官网

开源社区

约束介绍

张翠娉2022-07-14约束介绍

约束介绍

在给表中插入或者更新数据时,必须满足约束,否则,操作将失败。

约束可以在创建表时规定,或者创建表后规定(使用 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=#