Oracle 11g OCP 实战:创建表与外键约束解析
需积分: 9 191 浏览量
更新于2024-07-19
收藏 3.6MB PDF 举报
"Oracle 11g OCP 051 中文解析"
在Oracle数据库管理中,OCP(Oracle Certified Professional)是Oracle公司为数据库管理员提供的专业认证之一,旨在证明其在特定版本的Oracle数据库技术方面的专业知识。Oracle 11g OCP认证包括一系列的考试,其中051可能是某一个特定的考试部分或题目集。
题目涉及的内容是关于SQL的`CREATE TABLE AS SELECT`语句,这是Oracle数据库中用于快速创建新表的一种方法。它允许我们基于现有表的数据创建新的表结构,同时可以包含某些特定的选项,如默认值、约束等。
题目展示了一个示例表结构,包括SALES、CUSTOMERS、PRODUCTS和TIMES四张表。其中,PROD_ID、CUST_ID和TIME_ID分别作为外键存在于SALES表中,分别关联到PRODUCTS、CUSTOMERS和TIMES表。然后,给出了一个`CREATE TABLE AS SELECT`的命令,试图从SALES表中选取prod_id、cust_id两列,并用系统当前日期(SYSDATE)作为order_date列的默认值。
现在,我们需要评估这个命令会如何执行:
A. 新的NEW_SALES表不会被创建,因为默认值不能在列定义中指定。
这个选项是错误的。在Oracle中,可以在`CREATE TABLE AS SELECT`语句中指定列的默认值。
B. NEW_SALES表会被创建,并且所有在指定列上定义的NOT NULL约束都会传递到新表。
这个选项是不完整的。虽然`CREATE TABLE AS SELECT`会复制源表的非空约束,但这里没有提及NOT NULL约束。
C. NEW_SALES表不会被创建,因为CREATE TABLE命令中的列名与SELECT子句中的列名不匹配。
这个选项是错误的。从题目来看,CREATE TABLE命令中的列名(prod_id, cust_id, order_date)与SELECT子句中的列(prod_id, cust_id, time_id)是匹配的,尽管order_date列在SELECT中未显式列出,但因为在CREATE语句中指定了默认值,所以仍然匹配。
D. NEW_SALES表会被创建,并且所有在指定列上定义的外键约束都会传递到新表。
这个选项是错误的。`CREATE TABLE AS SELECT`不会复制源表的外键约束。新创建的表只包含选定列的数据,而不包括任何约束,如外键。
正确答案应该是:D. NEW_SALES表会被创建,但所有在指定列上定义的外键约束都不会传递到新表。这是因为`CREATE TABLE AS SELECT`语句不继承源表的约束,包括外键约束。因此,NEW_SALES表将不包含对PRODUCTS、CUSTOMERS和TIMES表的外键关系。
在实际应用中,如果需要在新表中保留这些外键约束,你需要单独为新表创建这些约束。这可以通过在创建表后使用`ALTER TABLE`命令添加外键约束来实现。对于默认值,如order_date列的SYSDATE,默认值将在新表中生效,因为它是在CREATE TABLE语句中明确指定的。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2013-07-26 上传
2013-03-26 上传
2014-04-18 上传
284 浏览量
2018-05-07 上传