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

2017-10-17  本文已影响0人  瀚高BLOG

约束条件,就是给表的字段添加用户需要的约束,比方说限制输入的只能为正数、限制字段输入的特殊规则等。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

上一篇下一篇

猜你喜欢

热点阅读