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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 转载,觉得这篇写 SQLAlchemy Core,写得非常不错。不过后续他没写SQLAlchemy ORM... ...
    非梦nj阅读 5,605评论 1 14
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,811评论 18 399
  • 什么是SQLite?数据库存储数据的步骤 ●SQLite是一款轻型的嵌入式数据库,它占用资源非常的低,在嵌入式设备...
    飞行的猫阅读 2,607评论 1 7
  • 在地铁和电梯间,经常听见一个亢奋的男声吆喝:抗疲劳,就喝XX饮料……这简直是反人类的周扒皮宣言。人饿了要吃,渴了要...
    招财猫翁子棋阅读 389评论 1 2

友情链接更多精彩内容