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

 我来答
greystar_cn
2016-03-18 · 知道合伙人软件行家
greystar_cn
知道合伙人软件行家
采纳数:16407 获赞数:17260
本人主要从事.NET C#方向的技术开发工作,具有10多年的各类架构开发工作经验。

向TA提问 私信TA
展开全部
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约束,证明了主键约束也是唯一约束。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式