Welcome 微信登录

首页 / 数据库 / MySQL / Oracle primary key和unique key的区别与联系

  • 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约束,证明了主键约束也是唯一约束。 
  • Oracle 基础知识之查看用户,用户权限,用户表空间,用户默认表空间Oracle 数据完整性的维护相关资讯      Oracle教程 
    • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
    • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
    • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
    • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
    • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
    • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
    本文评论 查看全部评论 (2)
    表情: 姓名: 字数


    评论声明
    • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
    • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
    • 本站管理人员有权保留或删除其管辖留言中的任意内容
    • 本站有权在网站内转载或引用您的评论
    • 参与本评论即表明您已经阅读并接受上述条款