美文网首页
瀚高数据库----表约束条件

瀚高数据库----表约束条件

作者: 瀚高BLOG | 来源:发表于2017-10-17 14:18 被阅读0次

    约束条件,就是给表的字段添加用户需要的约束,比方说限制输入的只能为正数、限制字段输入的特殊规则等。SQL 允许你在字段和表上定义约束,约束允许你对数据施加任意控制。

    1、唯一约束

    唯一约束限制字段的某一行值与该字段其他行都不一样,具有唯一性。语法如下:

    CREATE TABLE test(

    id text UNIQUE,

    name text

    )

    或者

    CREATE TABLE test(

    id text,

    name text,

    UNIQUE(id)

    )

    或者多个字段组合成唯一约束

    CREATE TABLE test(

    id text,

    name text,

    UNIQUE(id,name)

    )

    你可以给约束起一个名字

    CREATE TABLE test(

    id text CONSTRAINT uniqueDiff UNIQUE,

    name text

    )

    通常,如果包含在唯一约束中的那几个字段在表中有多个相同的行,就违反了唯一约束。但是在这种比较中,NULL 被认为是不相等的。这就意味着,在多字段唯一约束的情况下,如果在至少一个字段上出现 NULL ,那么我们还是可以存储同样的这种数据行。这种行为遵循 SQL 标准,但是我们听说其它 SQL 数据库可能不遵循这个标准。因此如果你要开发可移植的程序,那么最好仔细些。

    2、非空约束

    非空约束限制字段不能为NULL,语法如下:

    CREATE TABLE test(

    id text CONSTRAINT NOT NULL,

    name text

    )

    3、主键约束

    主键越是是非空约束和唯一约束的组合,语法如下:

    CREATE TABLE test(

    id text PRIMARY KEY,

    name text

    )

    4、外键约束

    外键约束声明一个字段(或者一组字段)的数值必须匹配另外一个表中出现的数值。我们把这个行为称为两个相关表之间的参照完整性。语法如下:

    现在有一个产品表

    CREATE TABLE product(

    id integer PRIMARY KEY,

    pro_name text,

    price integer

    )

    然后有一个订单表,订单里的产品从产品表里面取

    CAREATE TABLE order(

    id integer PRIMARY KEY,

    pro_id integer REFERNCES product,

    totalNum integer

    )

    外键约束会带来一个问题,如果订单中已存在的产品被删除,那么该订单如何处理?有两种处理方式,一种是级联删除,另外一种是不予许删除。

    如下例子:

    CREATE TABLE products (    product_no integer PRIMARY KEY,    name text,    price numeric);

    CREATE TABLE orders (    order_id integer PRIMARY KEY,    shipping_address text,    ...);

    CREATE TABLE order_items (    

    product_no integer REFERENCES products ON DELETE RESTRICT,    order_id integer REFERENCES orders ON DELETE CASCADE,    

    quantity integer,    

    PRIMARY KEY (product_no, order_id)

    )

    ON DELETE RESTRICT:不允许删除

    ON DELETE CASCADE:级联删除,删除orders,同时删除orders_items.

    5、检查约束

    检查约束允许你自定需要的约束条件,语法如下:

    CREATE TABLE products ( 

       product_no integer, 

       name text, 

       price numeric CHECK (price > 0)

    )  

    这里限制价格只能大于0

    相关文章

      网友评论

          本文标题:瀚高数据库----表约束条件

          本文链接:https://www.haomeiwen.com/subject/zskkuxtx.html