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.作为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约束,证明了主键约束也是唯一约束。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯