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