注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

Define multiple columns constraints  

2011-03-28 17:39:52|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

    
              今天看到论坛上有篇贴子有点意思,这里记录下,问题是这样的,创建一张新表,
并且需要对表上两个字段建立约束,约束的定义:columnA 或者 columnB 不能为空。以前
在学习 oracle 时只能对某一张字段定义约束,今天才知道 PostgreSQL提供更强大的功能,
可以对表上多个字段定义表级的约束,下面是测试步骤。

--1 创建表
skytf=> create table test_28 (
skytf(> id integer,          
skytf(> name varchar(32),    
skytf(> address varchar(128));
CREATE TABLE


--2 查看表结构
skytf=> \d test_28
            Table "skytf.test_28"
 Column  |          Type          | Modifiers
---------+------------------------+-----------
 id      | integer                |
 name    | character varying(32)  |
 address | character varying(128) |

     现在需要建立约束,约束定义:字段name或者 address 不能为空, 也就是这两个字段必须一个为非空。

--3 创建约束
skytf=> alter table test_28 add constraint con_test_28 check ( name is not null or address is not null);
ALTER TABLE

--4 验证,约束已创建
skytf=> \d test_28
            Table "skytf.test_28"
 Column  |          Type          | Modifiers
---------+------------------------+-----------
 id      | integer                |
 name    | character varying(32)  |
 address | character varying(128) |
Check constraints:
    "con_test_28" CHECK (name IS NOT NULL OR address IS NOT NULL)
   
--5 插入数据进行测试   
skytf=> insert into test_28(id,name) values  (1,'francs');
INSERT 0 1

skytf=> insert into test_28(id,address) values  (1,'HZ');
INSERT 0 1

skytf=> insert into test_28(id,name,address) values  (1,null,null);
ERROR:  new row for relation "test_28" violates check constraint "con_test_28"

       备注:从上面测试步骤看出,约束正确,PostgreSQL真是功能强大啊。


PostgreSQL 文档解释
--Column Check Constraints
      The SQL standard says that CHECK column constraints can only refer to the column they apply to; only CHECK table constraints can refer to multiple columns. PostgreSQL does not enforce this restriction; it treats column and table check constraints alike.

--Two ways to define constraints
      There are two ways to define constraints: table constraints and column constraints. A column constraint is defined as part of a column definition. A table constraint definition is not tied to a particular column, and it can encompass more than one column. Every column constraint can also be written as a table constraint; a column constraint is only a notational convenience for use when the constraint only affects one column.

                  
                  

  评论这张
 
阅读(25768)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016