Oracle修改主键约束

  项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的。去数据库捞了一把,还好数据都不为空:

SQL> select count(*) from t_wlf_record t where t.acceptinvitetime is null;
 
  COUNT(*)
----------
         0

  那么我们需要先把这个字段修改为非空字段:

alter table T_WLF_RECORD modify ACCEPTINVITETIME not null;

  接着才能修改主键约束,约束无法直接修改,只能先删后插:

alter table T_WLF_RECORD drop constraint SYS_C0018888;
alter table T_WLF_RECORD add constraint PK_T_WLF_RECORD PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID, ACCEPTINVITETIME);

  最后把注释改下:

comment on column T_WLF_RECORD.ACCEPTINVITETIME is '接受邀请时间(联合主键)';

  作为一个专业人员,我们应该把回滚语句也写好:

alter table T_WLF_RECORD drop constraint PK_T_WLF_RECORD;
alter table T_WLF_RECORD add constraint SYS_C0018888 PRIMARY KEY (INVITEEMSISDN, INVITERMSISDN, ACTIVITYID);
alter table T_WLF_RECORD modify ACCEPTINVITETIME null;
comment on column T_WLF_RECORD.ACCEPTINVITETIME is '接受邀请时间';

  最后总结下:约束的作用是保证数据的唯一性和完整性,比如主键约束你作为主键的字段不能为空,唯一约束你不能插入相同数据。具体区分如下:

  1、主键约束要求列值非空,而唯一键约束和唯一索引不要求列值非空,都不能有重复数据;

  2、主键约束和唯一键约束会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效或被删掉时,隐式创建的唯一索引会被删除。

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值