oracle sql主键重命名中的查询

oracle sql主键重命名中的查询,oracle,foreign-keys,primary-key,Oracle,Foreign Keys,Primary Key,如果我重命名一个列,它是该表中的主键,那么重命名后它仍然是主键。如果我还将该列引用到其他表的其他列,那么它会被引用还是我必须再次引用它?如果重命名主键列,则不会发生任何事情,也就是说,不考虑约束 主表和明细表: SQL> create table master (id_master number primary key); Table created. SQL> create table detail (id_detail number primary key, 2

如果我重命名一个列,它是该表中的主键,那么重命名后它仍然是主键。如果我还将该列引用到其他表的其他列,那么它会被引用还是我必须再次引用它?

如果重命名主键列,则不会发生任何事情,也就是说,不考虑约束

主表和明细表:

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\u C007213
(在
MASTER
上)包含
CHANGED\u 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>
是的


是否应重命名主键列?很可能不是。在应用程序开发的早期阶段,可能是这样(但事实上,您可以做到这一点并不意味着您应该做到这一点)。然而,一旦您创建了前端应用程序并在任何地方使用该列,修复它并使其正常工作将成为一场噩梦。如果我是你,我就不会这么做