当前位置:操作系统 > Unix/Linux >>

[每日一题] OCP1z0-047 :2013-08-18禁用启用约束――主键与外键

[每日一题] OCP1z0-047 :2013-08-18禁用启用约束――主键与外键
 
 
正确答案:C
 
根据题意,测试结果如下:
1、创建表emp,并且设emp_no字段为主键,设mgr_no字段为外键。
[html] 
gyj@MYDB> create table emp  
  2   (emp_no number(2) constraint emp_emp_no_pk primary key,  
  3   ename varchar2(15),  
  4   salary number(8,2),  
  5   mgr_no number(2) constraint emp_mgr_fk references emp);  
  
Table created.  

 

 
2、禁用约束主键,同时也禁用了外键
[html] 
gyj@MYDB>  alter table emp disable constraint emp_emp_no_pk cascade;     
  
Table altered.  

 

 
3、查约束主键与外键是否都被禁用了,确实都被DISABLED了
[html] 
gyj@MYDB> col owner for a10  
gyj@MYDB> select  OWNER,CONSTRAINT_NAME, TABLE_NAME,STATUS from user_constraints where table_name='EMP';  
  
OWNER      CONSTRAINT_NAME                TABLE_NAME                     STATUS  
---------- ------------------------------ ------------------------------ --------  
GYJ        EMP_EMP_NO_PK                  EMP                            DISABLED  
GYJ        EMP_MGR_FK                     EMP                            DISABLED  

 

 
4、启用约束主键
[html] 
gyj@MYDB> alter table emp enable constraint emp_emp_no_pk;      
  
Table altered.  

 

 
5、 查约束主键与外键是否都被禁用了,只有主键被禁用了。
[html] 
gyj@MYDB> select  OWNER,CONSTRAINT_NAME, TABLE_NAME,STATUS from user_constraints where table_name='EMP';  
  
OWNER      CONSTRAINT_NAME                TABLE_NAME                     STATUS  
---------- ------------------------------ ------------------------------ --------  
GYJ        EMP_EMP_NO_PK                  EMP                            ENABLED  
GYJ        EMP_MGR_FK                     EMP                            DISABLED  

 

 
6、  启用约束外键
[html] 
gyj@MYDB> alter table emp enable constraint emp_mgr_fk;      
  
Table altered.  

 

 
7、此时约束外键也被禁用了
[html] 
gyj@MYDB> select  OWNER,CONSTRAINT_NAME, TABLE_NAME,STATUS from user_constraints where table_name='EMP';  
  
OWNER      CONSTRAINT_NAME                TABLE_NAME                     STATUS  
---------- ------------------------------ ------------------------------ --------  
GYJ        EMP_EMP_NO_PK                  EMP                            ENABLED  
GYJ        EMP_MGR_FK                     EMP                            ENABLED  

 

 
8、禁用或启动约束主键与外键的官方文档语法图。
 


 
9、分析
禁用主健约束,句中指定CASCADE关键字,这样将在禁用主键约束的同时会禁用那些引用它们的FOREIGN KEY约束。如下操作:
[html] 
gyj@MYDB> alter table emp disable constraint emp_emp_no_pk cascade;   
  
Table altered.  

 

 
 有没有什么语?在启用主键约束时侯,同时也启动外键。如下操作报错:
[html] 
gyj@MYDB>  alter table emp enable constraint emp_emp_no_pk cascade;  
 alter table emp enable constraint emp_emp_no_pk cascade  
                                                 *  
ERROR at line 1:  
ORA-00933: SQL command not properly ended  

 

 
*特别注意的是在ENABLE主键后不会自动恢复外键(没有cascade选项),因此需要手工对引用该键的约束进行ENABLE。
如下操作:
ALTER TABLE '子表' ENABLE CONSTRAINT '约束主键名';
ALTER TABLE '子表' ENABLE CONSTRAINT '约束外键名';

 

 
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,