始创于2000年 股票代码:831685
咨询热线:0371-60135900 注册有礼 登录
  • 挂牌上市企业
  • 60秒人工响应
  • 99.99%连通率
  • 7*24h人工
  • 故障100倍补偿
您的位置: 网站首页 > 帮助中心>文章内容

Oracle primary key和unique key的区别与联系

发布时间:  2012/8/20 18:04:48
•primary key与unique key都是唯一性约束。但二者有很大的区别:  
•1.作为primary key的1个或多个列必须为NOT NULL,  
•  如果建表时此列设为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。  
•  而unique key约束的列可以为null,这是primary key与unique key最大的区别。  
•2.一个表只能有一个primary key(单列或多列,多列主键叫联合主键),但可以有多个unique key。  
•实例1:  
•create table t(c1 number(2),c2 date,c3 varchar2(5),c4 int);   •desc t;  
•Name Type        Nullable Default Comments   
•---- ----------- -------- ------- --------   
•C1   NUMBER(2)   Y                           
•C2   DATE        Y                           
•C3   VARCHAR2(5) Y                           
•C4   INTEGER     Y  
•//   •实例2:添加primary key  
•alter table t add constraint t_pk primary key(c1,c2);  
•desc t;  
•Name Type        Nullable Default Comments   
•---- ----------- -------- ------- --------   
•C1   NUMBER(2)                               
•C2   DATE                                    
•C3   VARCHAR2(5) Y                           
•C4   INTEGER     Y   
•我们看到,将c1,c2列设为联合主键后,他们变为not null;   •如果在建表时就指定了主键的话,主键列将会默认为not null。   •//   •如果我们在添加一个primary key,那么我们将会得到一个错误:  
•alter table t add constraint t_pk_2 primary key(c3,c4)  
•ORA-02260: table can have only one primary key  
•//   •实例3:添加unique key  
•alter table t add constraint unique_key_t unique(c3,c4);  
•实例4:添加数据  
•insert into t(c1,c2,c3,c4)  
•values(10,sysdate,'abc',3);   •1 row inserted  
•//   •insert into t(c1,c2,c3,c4)  
•values(11,sysdate,'abc',3);   •ORA-00001: unique constraint (SCOTT.UNIQUE_KEY_T) violated  
•我们看到,添加的第二条数据违反了刚刚创建的唯一键约束;  
•将unique_key_t删除,添加就能成功了。  
•实例5:删除unique key  
•alter table t drop constraint unique_key_t;  
•insert into t(c1,c2,c3,c4)  
•values(11,sysdate,'abc',3);   •1 row inserted  
•//   •实例6:删除primary key  
•alter table t drop constraint t_pk;  
•Table altered  
•//   •desc t;  
•Name Type        Nullable Default Comments   
•---- ----------- -------- ------- --------   
•C1   NUMBER(2)   Y                           
•C2   DATE        Y                           
•C3   VARCHAR2(5) Y                           
•C4   INTEGER     Y   
•删除主键约束后,c1,c2列由恢复了原来的默认值null。   •//   •3.其实primary key也是unique key,被primary key约束的列not null,并且不允许重复   •实例7:  
•truncate table t;  
•Table truncated  
•//   •alter table t add constraint t_pk primary key(c1,c2);  
•Table altered  
•//   •insert into t(c1,c2,c3,c4)  
•values(1,to_date('2011-01-01','yyyy-mm-dd'),'csdn',10);   •1 row inserted  
•//   •insert into t(c3,c4)  
•values('china',1);   •ORA-01400: cannot insert NULL into ("SCOTT"."T"."C1")   •//   •insert into t(c1,c2,c3,c4)  
•values(1,to_date('2011-01-01','yyyy-mm-dd'),'csdn',10);   •ORA-00001: unique constraint (SCOTT.T_PK) violated  
•这里,我们看到primary key t_pk变成了unique约束,证明了主键约束也是唯一约束。

本文出自:亿恩科技【www.enkj.com】

服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]

  • 您可能在找
  • 亿恩北京公司:
  • 经营性ICP/ISP证:京B2-20150015
  • 亿恩郑州公司:
  • 经营性ICP/ISP/IDC证:豫B1.B2-20060070
  • 亿恩南昌公司:
  • 经营性ICP/ISP证:赣B2-20080012
  • 服务器/云主机 24小时售后服务电话:0371-60135900
  • 虚拟主机/智能建站 24小时售后服务电话:0371-60135900
  • 专注服务器托管17年
    扫扫关注-微信公众号
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 亿恩科技 版权所有  地址:郑州市高新区翠竹街1号总部企业基地亿恩大厦  法律顾问:河南亚太人律师事务所郝建锋、杜慧月律师   京公网安备41019702002023号
      1
     
     
     
     

    0371-60135900
    7*24小时客服服务热线