如何解决oracle sql中主键的重命名查询
如果我重命名作为该表中主键的列,那么重命名后它仍然是主键。如果我还将该列引用到其他表的其他列,那么它会被引用还是我必须再次引用它?
解决方法
重命名主键列不会发生任何事情 - 与约束无关。
主表和明细表:
SQL> create table master (id_master number primary key);
Table created.
SQL> create table detail (id_detail number primary key,2 id_det_mas number references master (id_master));
Table created.
让我们重命名 master 的主键列:
SQL> alter table master rename column id_master to changed_name;
Table altered.
约束是什么样的?
SQL> select constraint_name,r_constraint_name
2 from user_constraints C
3 where table_name = 'DETAIL'
4 and constraint_type = 'R';
CONSTRAINT_NAME R_CONSTRAINT_NAME
------------------------------ ------------------------------
SYS_C007215 SYS_C007213
SQL> select *
2 from user_cons_Columns
3 where constraint_name in ('SYS_C007215','SYS_C007213');
OWNER CONSTRAINT_NAME TABLE_NAME COLUMN_NAME POSITION
------ --------------- --------------- --------------- ----------
SCOTT SYS_C007213 MASTER CHANGED_NAME 1
SCOTT SYS_C007215 DETAIL ID_DET_MAS 1
SQL>
如您所见,约束 SYS_C007213
(在 MASTER
上)包含 CHANGED_NAME
列。
引用约束是否正常工作?
SQL> insert into master values (1);
1 row created.
SQL> insert into detail values (100,200);
insert into detail values (100,200)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C007215) violated - parent key not
found
SQL>
是的,确实如此。
您应该重命名主键列吗?很可能不是。在应用程序开发的早期阶段,也许(但您可以做到这一点并不意味着您应该这样做)。然而,一旦您创建了前端应用程序并无处不在使用该列,修复它并使其正常工作将成为一场噩梦。如果我是你,我就不会这样做。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。