微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

oracle sql中主键的重命名查询

如何解决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 举报,一经查实,本站将立刻删除。