关于主键约束enable和disable的问题

当我们在创建主键约束的时候,会自动创建一个唯一索引(唯一约束也是如此)

其实对于主键约束而言,它是非空约束+唯一约束的组合。而自动创建的唯一索引,就是用来实现唯一性这一规则的。

当我们disable掉主键约束后,它会自动删掉当初自动创建的唯一索引。

同理,当我们enable主键后,它又会自动创建唯一索引。

另外,当我们disable约束后,像主键中插入null值后是被允许的,但当我们再次enable主键约束,便会报错:

SQL> insert into test values(null);
1 row created.
SQL> commit;
Commit complete.
SQL> alter table test enable constraint pk_id;
alter table test enable constraint pk_id
*
ERROR at line 1:
ORA-02437: cannot validate (SYS.PK_ID) - primary key violated

所以,对于约束enable过程,又涉及到一个对原有数据是否做约束检查问题。

对于上述情况,可以novalidate,即允许原有数据中存在不符合主键约束的值:

SQL> alter table test enable novalidate constraint pk_id;
Table altered.

但是,约束启用后,就不允许有违反约束的值了

SQL> insert into test values(null);
insert into test values(null)
                        *
ERROR at line 1:
ORA-01400: cannot insert NULL into ("SYS"."TEST"."ID")

------------------------------------------------------------------------------------------

记录一些细节,有时候真是记不清。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值