Oracle修改主键约束
2024-08-24 05:41:52
项目需求,有张表,原有三个联合主键,现在需要再加一个字段进去,而恰恰这个字段可以为空的。去数据库捞了一把,还好数据都不为空:
SQL> select count(*) from t_wlf_record t where t.acceptinvitetime is null; COUNT(*)
----------
那么我们需要先把这个字段修改为非空字段:
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、主键约束和唯一键约束会隐式创建同名的唯一索引,当主键约束或者唯一键约束失效或被删掉时,隐式创建的唯一索引会被删除。
最新文章
- saltstack命令执行过程
- 阻塞非阻塞,同步异步四种I/O方式
- MapReduce实例浅析
- AngularJS——karma的安装
- 学习smali
- OC基础(14)
- Package inputenc Error: Unicode char \u8: not set up for use with LaTeX.
- MPMoviePlayerController 视频播放器—IOS开发
- 深入理解ClassLoader(五)—类的卸载
- poj 2312 Battle City【bfs+优先队列】
- cocos2dx ——屏幕适配
- 应用 Valgrind 发现 Linux 程序的内存问题(转)
- 解决Django + DRF:403 FORBIDDEN:CSRF令牌丢失或不正确,{";detail";:";CSRF Failed: CSRF cookie not set.";}
- kubernetes环境搭建
- VBA续嘘嘘——宏技巧集绵
- 经典JS
- libevent安装方法
- HDUOJ----1301 Jungle Roads
- thinkphp+redis实现秒杀,缓存等功能
- noip模拟题《迷》enc