永发信息网

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

答案:2  悬赏:20  手机版
解决时间 2021-04-01 19:12
  • 提问者网友:心牵心
  • 2021-04-01 09:21
Oracle primary key和unique key的区别与联系
最佳答案
  • 五星知识达人网友:痴妹与他
  • 2020-07-28 09:31
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(单列或多列,多列主键叫联合主键),但可以有多个
  这里,我们看到primary key t_pk变成了unique约束,证明了主键约束也是唯一约束。
  转载,仅供参考。
全部回答
  • 1楼网友:时间的尘埃
  • 2020-08-21 18:55
转: •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约束,证明了主键约束也是唯一约束。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯