问题 单项选择题

部门(DEPARTMENT)表的结构如下:
DEPT_ID NUMBER(9)
DEPT_NAME VARCHAR2(20)
REGION_ID NUMBER(9)
其中,REGION_ID列上有一个指向REGION表的外键约束,假如试着使用如下的语句来修改DEPARTMENT表:
UPDATE department
SETdep_id=6546,
region_id=9705
WHERE dept_id=8940;
结果给出了如下的错误信息:
ORA-02291: integrity constraint (SYS_C23) violated-parent key not found
以下哪个陈述是造成这一错误的原因

A.值6546已经在REGION表中存在
B.值6546已经在DEPARTMENT表中存在
C.值9705在REGION表中并不存在
D.值8940在DEPARTMENT表中并不存在

答案

参考答案:C

解析: 这一题是测试对外键(FOREIGN KEY)约束和引用完整性(Referential Integrity)的理解。因为在DEPARTMENT表的REGION_ID列上有一个指向REGION表的外键约束,所以可以确定REGION表是主表(Parent Table)而DEPARTMENT表是从表(Child Table)。根据本题的错误信息——integrity constraint (SYS_C23) violated-parent key not found,并参考有关外键约束的介绍和有关外键约束对DML语句和DDL语句的影响的解释,可以断定选项C是正确的。
因为如果值6546已经在REGION表中存在,则本题的UPDATE语句将成功执行,所以选项A肯定是错误的。
因为在从表中不同数据行外键的值是可以相同的,所以即使值6546已经在从表DEPARTMENT表中存在,本题的UPDATE语句也将执行成功,所以选项B肯定也是错误的。
因为如果值8940在DEPARTMENT表中并不存在,也只是WHERE子句中的条件不成立,并不会出现违反完整性约束的错误信息,所以选项D肯定也是错误的。

填空题
单项选择题