文档课题:测试oracle主键被激活后,依赖该列的外建需手动重新激活.
环境:oracle 19.12
以下为测试过程.
SQL> desc emp3;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPLOYEE_ID NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME NOT NULL VARCHAR2(25)
EMAIL NOT NULL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIREDATE NOT NULL DATE
JOB_ID NOT NULL VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
------------------------------ - --------
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
SQL> alter table emp3 add constraint PK_EMP_ID primary key (employee_id);
Table altered.
SQL> alter table emp3
2 add constraint fk_emp_mgr
3 foreign key (manager_id)
4 references emp3(employee_id);
Table altered.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
-------------------- - --------
FK_EMP_MGR R ENABLED
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
PK_EMP_ID P ENABLED
6 rows selected.
SQL> alter table emp3 disable constraint pk_emp_id;
alter table emp3 disable constraint pk_emp_id
*
ERROR at line 1:
ORA-02297: cannot disable constraint (ORA1.PK_EMP_ID) - dependencies exist
SQL> alter table emp3 disable constraint FK_EMP_MGR;
Table altered.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
-------------------- - --------
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
PK_EMP_ID P ENABLED
FK_EMP_MGR R DISABLED
6 rows selected.
SQL> alter table emp3 disable primary key cascade;
Table altered.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
-------------------- - --------
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
FK_EMP_MGR R DISABLED
PK_EMP_ID P DISABLED
6 rows selected.
SQL> alter table emp3 enable constraint FK_EMP_MGR;
alter table emp3 enable constraint FK_EMP_MGR
*
ERROR at line 1:
ORA-02270: no matching unique or primary key for this column-list
SQL> alter table emp3 enable primary key;
Table altered.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
-------------------- - --------
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
PK_EMP_ID P ENABLED
FK_EMP_MGR R DISABLED
6 rows selected.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3'
CONSTRAINT_NAME C STATUS
------------------------------ - --------
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
PK_EMP_ID P ENABLED
FK_EMP_MGR R DISABLED
6 rows selected.
注意:主键被激活后,依赖该列的外建依然是disabled.
SQL> alter table emp3 enable constraint fk_emp_mgr;
Table altered.
SQL> select constraint_name,constraint_type,status from user_constraints where table_name='EMP3';
CONSTRAINT_NAME C STATUS
------------------------------ - --------
FK_EMP_MGR R ENABLED
SYS_C007954 C ENABLED
SYS_C007955 C ENABLED
SYS_C007956 C ENABLED
SYS_C007957 C ENABLED
PK_EMP_ID P ENABLED
6 rows selected.
结论:主键被激活后,依赖该列的外建需手动重新激活.