oracle删除unique key,Oracle primary key和unique key的区别与联系

primarykey与uniquekey都是唯一性约束,用来限制相同字段的插入 。但二者有很大的区别: 1.作为primarykey的1个或多个列必须为NOTNULL, 如果建表时此列设为NULL,在增加PRIMARYKEY时,列自动更改为NOTNULL。 而uniquekey约束的列可以为null,这是primarykey

primarykey与uniquekey都是唯一性约束,用来限制相同字段的值插入。但二者有很大的区别:

1.作为primarykey的1个或多个列必须为NOTNULL,

如果建表时此列设为NULL,在增加PRIMARYKEY时,列自动更改为NOTNULL。

而uniquekey约束的列可以为null,这是primarykey与uniquekey最大的区别。

2.一个表只能有一个primarykey(单列或多列,多列主键叫联合主键),但可以有多个uniquekey。实例1:

createtablet(c1number(2),c2date,c3varchar2(5),c4int);

desct;

NameTypeNullableDefaultComments

————————————–

C1NUMBER(2)Y

C2DATEY

C3VARCHAR2(5)Y

C4INTEGERY

//

实例2:添加primarykey

altertabletaddconstraintt_pkprimarykey(c1,c2);

desct;

NameTypeNullableDefaultComments

————————————–

C1NUMBER(2)

C2DATE

C3VARCHAR2(5)Y

C4INTEGERY

我们看到,将c1,c2列设为联合主键后,他们变为notnull;

如果在建表时就指定了主键的话,主键列将会默认为notnull。

//

如果我们在添加一个primarykey,那么我们将会得到一个错误:

altertabletaddconstraintt_pk_2primarykey(c3,c4)

ORA-02260:tablecanhaveonlyoneprimarykey

//

实例3:添加uniquekey

altertabletaddconstraintunique_key_tunique(c3,c4);

实例4:添加数据

insertintot(c1,c2,c3,c4)

values(10,sysdate,’abc’,3);

1rowinserted

//

insertintot(c1,c2,c3,c4)

values(11,sysdate,’abc’,3);

ORA-00001:uniqueconstraint(SCOTT.UNIQUE_KEY_T)violated

我们看到,添加的第二条数据违反了刚刚创建的唯一键约束;

将unique_key_t删除,添加就能成功了。

实例5:删除uniquekey

altertabletdropconstraintunique_key_t;

insertintot(c1,c2,c3,c4)

values(11,sysdate,’abc’,3);

1rowinserted

//

实例6:删除primarykey

altertabletdropconstraintt_pk;

Tablealtered

//

desct;

NameTypeNullableDefaultComments

————————————–

C1NUMBER(2)Y

C2DATEY

C3VARCHAR2(5)Y

C4INTEGERY

删除主键约束后,c1,c2列由恢复了原来的默认值null。

//

3.其实primarykey也是uniquekey,被primarykey约束的列notnull,并且不允许重复

实例7:

truncatetablet;

Tabletruncated

//

altertabletaddconstraintt_pkprimarykey(c1,c2);

Tablealtered

//

insertintot(c1,c2,c3,c4)

values(1,to_date(’2011-01-01′,’yyyy-mm-dd’),’csdn’,10);

1rowinserted

//

insertintot(c3,c4)

values(‘china’,1);

ORA-01400:cannotinsertNULLinto(“SCOTT”.”T”.”C1″)

//

insertintot(c1,c2,c3,c4)

values(1,to_date(’2011-01-01′,’yyyy-mm-dd’),’csdn’,10);

ORA-00001:uniqueconstraint(SCOTT.T_PK)violated

这里,我们看到primarykeyt_pk变成了unique约束,证明了主键约束也是唯一约束。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值