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

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

发布时间:  2012/9/13 17:14:27
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号
      0
     
     
     
     

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