GBase 8c
安装配置
文章

GBase 8c 数据定义-检查约束

发表于2023-12-06 14:02:5236次浏览3个评论

GBase 8c数据库支持检查约束。

    检查约束是最普通的约束类型。它指定某个特定列中的值必须要满足某个布尔表达式。例如,为了要求正值的产品价格,可以使用如下语句:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0)
);

    可见约束定义和默认值定义一样跟在数据类型之后。默认值和约束之间的顺序没有影响。一个检查约束有关键字CHECK以及其后的包围在圆括号中的表达式组成。检查约束表达式应该涉及到被约束的列,否则该约束没有实际意义。
 

 

    也可以给与约束一个独立的名称。这会使错误消息更为清晰,同时也方便在需要更改约束时能引用它。语法为:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CONSTRAINT positive_price CHECK (price > 0)
);

    要指定一个命名的约束,请在约束名称标识符前使用关键词CONSTRAINT,然后把约束定义放在标识符之后(如果没有以这种方式指定一个约束名称,系统将会为我们选择一个)。
 

 

    检查约束也可以引用多个列。例如存储一个普通价格和一个打折后的价格,而我们希望保证打折后的价格低于普通价格:

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0),
    discounted_price numeric CHECK (discounted_price > 0),
    CHECK (price > discounted_price)
);

前两个约束看起来很相似。第三个则使用了一种新语法。它并没有依附在某个特定列,而是作为一个独立项出现在逗号分隔的列的列表中。列定义和约束定义可以以混合的顺序出现在列表中。我们将前两个约束称为列约束,而第三个约束为表约束,因为它独立于任何一个列定义。列约束也可以写成表约束,但反过来不行,因为列约束只能引用它所依附的那个列。上述例子也可以写成:

 

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric,
    CHECK (price > 0),
    discounted_price numeric,
    CHECK (discounted_price > 0),
    CHECK (price > discounted_price)
);

或者是:
 

 

CREATE TABLE products (
    product_no integer,
    name text,
    price numeric CHECK (price > 0),
    discounted_price numeric,
    CHECK (discounted_price > 0 AND price > discounted_price)
);

 

评论

登录后才可以发表评论
用户头像
levvel发表于 8个月前
进来看看,应该有收获
崔哥发表于 4个月前
浅浅余寒春半,雪消蕙草初长。烟迷柳岸旧池塘。风吹梅蕊闹,雨细杏花香。月堕枝头欢意,从前虚梦高唐,觉来何处放思量。如今不是梦,真个到伊行。
GBase用户51882发表于 2个月前
学会了