更新时间:2024-10-26 GMT+08:00

CHECK约束

CHECK约束声明一个布尔表达式,每次要插入的新行或者要更新的行的新值必须使表达式结果为真或未知才能成功,否则会上报一个异常并且不会修改数据库。

声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。

CREATE TABLE CHECK

在GaussDB(DWS)中,创建表时定义某一列的CHECK约束可以放在列字段后面也可放在下面,语法为:CHECK (column name > 0),如需命名 CHECK 约束,并定义多个列的 CHECK 约束则可使用下面的语法:CONSTRAINT chk_name CHECK (column_namw1 >0 AND column_name2='x>x")。

check约束也将随着表的删除而删除。

输入示例

1
2
3
4
5
6
7
DROP TABLE IF EXISTS `t1`;
CREATE TABLE IF NOT EXISTS t1  (
  id int(25) not null primary key check (id > 1 and id < 100),
  city varchar(255) not null unique check (city='城市1' or city='城市2' or city='城市3'),
  population int(25) not null ,
  constraint t1_1 check (population>0 and population<10000)
) ;

输出示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
DROP TABLE IF EXISTS "public"."t1";
CREATE TABLE IF NOT EXISTS "public"."t1" (
  "id" INTEGER NOT NULL PRIMARY KEY CHECK (
    id > 1
    and id < 100
  ),
  "city" VARCHAR(1020) NOT NULL CHECK (
    city = '城市1'
    or city = '城市2'
    or city = '城市3'
  ),
  "population" INTEGER NOT NULL,
  CONSTRAINT t1_1 CHECK (
    population > 0
    and population < 10000
  )
) WITH (ORIENTATION = ROW, COMPRESSION = NO) NOCOMPRESS DISTRIBUTE BY HASH ("id");

ALTER TABLE CHECK

对表字段操作时,支持无命名约束和有命名约束,在某一列创建CHECK约束则可使用语法:ALTER TABLE 表名 ADD CHECK(<检查约束>);

如需命名CHECK约束,并定义多个列的CHECK约束则可使用语法:ALTER TABLE 表名 ADD CONSTRAINT <检查约束名> CHECK(<检查约束>);

输入示例

1
2
3
4
ALTER TABLE t1 add check (id>1 and id > 2  and id < 100 or id =50);
ALTER TABLE student add constraint check02 check (id > 1 and class = '3');
ALTER TABLE t1 add check (class=1 or class =2  or class = 3 or class=4 or class = 5 or class = 6);
ALTER TABLE t1 add check (city='城市1' or city='城市2' or city='城市3');

输出示例

1
2
3
4
ALTER TABLE "public"."t1" ADD CHECK ( id > 1  and id > 2 and id < 100  or id = 50 );
ALTER TABLE "public"."student" ADD CONSTRAINT check02 CHECK (  id > 1  and class = '3');
ALTER TABLE "public"."t1" ADD CHECK ( class = 1 or class = 2 or class = 3  or class = 4 or class = 5 or class = 6);
ALTER TABLE "public"."t1" ADD CHECK ( city = '城市1' or city = '城市2' or city = '城市3' );