`
helloyesyes
  • 浏览: 1306542 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Oracle 外键 说明

阅读更多

. 外键说明

1.1 官网上有关说明如下:

Maintaining Data Integrity in Application Development

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_constraints.htm#sthref748

Managing FOREIGN KEY Integrity Constraints

General information about defining, enabling, disabling, and dropping all types of integrity constraints is given in section "Dropping Integrity Constraints". The present section supplements this information, focusing specifically on issues regarding FOREIGN KEY integrity constraints, which enforce relationships between columns in different tables.

Note:

FOREIGN KEY integrity constraints cannot be enabled if the constraint of the referenced primary or unique key is not present or not enabled.

-- 当外键参考的主键不可用时,对应的外键也不可用。

Datatypes and Names for Foreign Key Columns

You must use the same datatype for corresponding columns in the dependent and referenced tables. The column names do not need to match.

-- 外键及其参考的字段名称可以不一样,但datatype 必须一致。

Limit on Columns in Composite Foreign Keys

Because foreign keys reference primary and unique keys of the parent table, and PRIMARY KEY and UNIQUE key constraints are enforced using indexes, composite foreign keys are limited to 32 columns.

Foreign Key References Primary Key by Default

If the column list is not included in the REFERENCES option when defining a FOREIGN KEY constraint (single column or composite), then Oracle Database assumes that you intend to reference the primary key of the specified table.

-- 当创建外键时,没有指定参考的字段,默认使用primary key

Alternatively, you can explicitly specify the column(s) to reference in the parent table within parentheses. Oracle Database automatically checks to verify that this column list references a primary or unique key of the parent table. If it does not, then an informative error is returned.

-- 外键必须是primary key 或者是unique key

Privileges Required to Create FOREIGN KEY Integrity Constraints

To create a FOREIGN KEY constraint, the creator of the constraint must have privileged access to the parent and child tables.

1The Parent Table The creator of the referential integrity constraint must own the parent table or have REFERENCES object privileges on the columns that constitute the parent key of the parent table.

2The Child Table The creator of the referential integrity constraint must have the ability to create tables (that is, the CREATE TABLE or CREATE ANY TABLE system privilege) or the ability to alter the child table (that is, the ALTER object privilege for the child table or the ALTER ANY TABLE system privilege).

In both cases, necessary privileges cannot be obtained through a role; they must be explicitly granted to the creator of the constraint.

These restrictions allow:

1The owner of the child table to explicitly decide which constraints are enforced and which other users can create constraints

2The owner of the parent table to explicitly decide if foreign keys can depend on the primary and unique keys in her tables

Choosing How Foreign Keys Enforce Referential Integrity

Oracle Database allows different types of referential integrity actions to be enforced, as specified with the definition of a FOREIGN KEY constraint:

1Prevent Delete or Update of Parent Key

The default setting prevents the deletion or update of a parent key if there is a row in the child table that references the key. For example:

SQL>create table emp_tab ( foreign key (deptno) references dept_tab);

2Delete Child Rows When Parent Key Deleted

The ON DELETE CASCADE action allows parent key data that is referenced from the child table to be deleted, but not updated. When data in the parent key is deleted, all rows in the child table that depend on the deleted parent key values are also deleted. To specify this referential action, include the ON DELETE CASCADE option in the definition of the FOREIGN KEY constraint. For example:

SQL>CREATE TABLE Emp_tab (

FOREIGN KEY (Deptno) REFERENCES Dept_tab

ON DELETE CASCADE);

3Set Foreign Keys to Null When Parent Key Deleted

The ON DELETE SET NULL action allows data that references the parent key to be deleted, but not updated. When referenced data in the parent key is deleted, all rows in the child table that depend on those parent key values have their foreign keys set to null. To specify this referential action, include the ON DELETE SET NULL option in the definition of the FOREIGN KEY constraint. For example:

SQL>CREATE TABLE Emp_tab (

FOREIGN KEY (Deptno) REFERENCES Dept_tab

ON DELETE SET NULL);

Viewing Definitions of Integrity Constraints

The data dictionary contains the following views that relate to integrity constraints:

ALL_CONSTRAINTS

ALL_CONS_COLUMNS

USER_CONSTRAINTS

USER_CONS_COLUMNS

DBA_CONSTRAINTS

DBA_CONS_COLUMNS

For example

SQL>SELECT Constraint_name, Constraint_type, Table_name, R_constraint_name

FROM User_constraints;

1.2 外键索引

如果在对应的child table 上,没有建立外键索引,那么可能造成enq: TM contention 的等待事件。 关于该等待事件具体参考我的Blog

Oracle enq: TX contention enq: TM contention 等待事件说明

http://blog.csdn.net/tianlesoftware/archive/2011/06/04/6526238.aspx

Tom 同学提供的一个查询没有见外键索引的表的SQL:

/* Formatted on 2011/6/4 15:39:24 (QP5 v5.163.1008.3004) */

SELECT table_name,

constraint_name,

cname1

|| NVL2 (cname2, ',' || cname2, NULL)

|| NVL2 (cname3, ',' || cname3, NULL)

|| NVL2 (cname4, ',' || cname4, NULL)

|| NVL2 (cname5, ',' || cname5, NULL)

|| NVL2 (cname6, ',' || cname6, NULL)

|| NVL2 (cname7, ',' || cname7, NULL)

|| NVL2 (cname8, ',' || cname8, NULL)

columns

FROM ( SELECT b.table_name,

b.constraint_name,

MAX (DECODE (position, 1, column_name, NULL)) cname1,

MAX (DECODE (position, 2, column_name, NULL)) cname2,

MAX (DECODE (position, 3, column_name, NULL)) cname3,

MAX (DECODE (position, 4, column_name, NULL)) cname4,

MAX (DECODE (position, 5, column_name, NULL)) cname5,

MAX (DECODE (position, 6, column_name, NULL)) cname6,

MAX (DECODE (position, 7, column_name, NULL)) cname7,

MAX (DECODE (position, 8, column_name, NULL)) cname8,

COUNT (*) col_cnt

FROM (SELECT SUBSTR (table_name, 1, 30) table_name,

SUBSTR (constraint_name, 1, 30) constraint_name,

SUBSTR (column_name, 1, 30) column_name,

position

FROM user_cons_columns) a,

user_constraints b

WHERE a.constraint_name = b.constraint_name

AND b.constraint_type = 'R'

GROUP BY b.table_name, b.constraint_name) cons

WHERE col_cnt >

ALL ( SELECT COUNT (*)

FROM user_ind_columns i

WHERE i.table_name = cons.table_name

AND i.column_name IN

(cname1,

cname2,

cname3,

cname4,

cname5,

cname6,

cname7,

cname8)

AND i.column_position <= cons.col_cnt

GROUP BY i.index_name)

/

可以通过该SQL 查看没有建外键索引的表。

1.3 外键的一些示例

-- 创建parent table

SQL> create table parent_tab as select distinct object_type from dba_objects;

Table created.

-- 创建child table

SQL> create table child_tab

2 as

3 select object_id, object_type, object_name

4 from all_objects;

<

分享到:
评论

相关推荐

    如何在oracle中查询所有用户表的表名、主键名称、索引、外键等

    根据提供的标题、描述以及部分代码内容,我们可以了解到这篇文章主要探讨的是如何在Oracle数据库中查询所有用户表的相关信息,包括表名、主键名称、索引、外键等元数据信息。接下来,我们将对这些知识点进行详细的...

    生成sqlserver、oracle数据库字段说明帮助工具

    标题所提及的“生成SQLServer、Oracle数据库字段说明帮助工具”正是为了解决这类问题而设计的。这种工具的主要功能是提取数据库中的字段注释或描述,然后整理成易于理解和使用的帮助文档,以提高开发人员和DBA的工作...

    oracle迁移mysql说明

    - 验证字段类型、主键、外键等属性是否符合预期。 #### 三、数据导入操作 1. **使用Navicat导入数据**: - 打开“数据传输”功能,设置源数据库为Oracle,目标数据库为MySQL。 - 注意:在配置选项时避免使用...

    oracle表结构生成工具

    Excel的便利性和灵活性使得用户可以方便地编辑和调整表结构,如添加、删除或修改列,设置主键、外键和索引等。工具会读取这些信息并自动生成相应的SQL脚本。 在使用这个工具时,用户首先需要在Excel中创建一个模板...

    Mysql to Oracle导入导出说明

    本说明将详细阐述这个过程中的关键步骤、工具选择以及注意事项。 首先,我们需要了解两个数据库系统的基本特性。MySQL是一种开源、轻量级的SQL数据库,广泛应用于中小型企业;而Oracle则是全球领先的商业数据库解决...

    oracle向达梦数据库迁移

    这一步涉及复制Oracle数据库中的表结构,包括表名、字段、数据类型、主键、外键、唯一性约束、非空约束等,并在DM8中重建。同时,迁移索引以保持查询性能,以及字段的注释和序列,用于自增字段。 四、删除键,约束...

    OracleTOMysql 转换工具

    以下是一些关于Oracle到MySQL转换工具及其涉及的技术知识点的详细说明: 1. **Oracle数据库**:Oracle是全球领先的关系型数据库管理系统,由甲骨文公司开发,以其高性能、高可用性和安全性著称。它支持复杂的SQL...

    数据库的设计文档(设计说明书)

    数据库设计文档和说明书对于任何涉及Oracle数据库项目的团队来说都是宝贵的资源。它不仅帮助开发人员理解数据结构,而且在系统维护、升级和故障排查时起到关键作用。因此,编写详尽、清晰的数据库设计文档是确保项目...

    Oracle课程设计-人事管理系统样例.rar

    以下是对这个样例系统的一些关键知识点的详细说明: 1. **Oracle数据库基础**:Oracle是世界上最流行的关系型数据库管理系统之一,它提供了强大的数据存储、管理和查询能力。在人事管理系统中,Oracle作为后端数据...

    Oracle 临时表用法

    2. **不支持主外键约束**:临时表不支持主键和外键约束,这可能会影响数据完整性的维护。 #### 六、示例 下面通过具体的SQL语句展示会话级临时表和事务级临时表的使用。 ##### 6.1 会话级临时表示例 ```sql ...

    Oracle造数工具

    在"概述.txt"文件中,可能包含了工具的使用说明、安装步骤、依赖项以及如何配置数据库连接等信息。这通常是开发者为了便于其他用户理解和使用工具而提供的文档。用户应按照文档中的指示设置环境,包括安装Python 2.7...

    Oracle 增加修改删除字段

    Oracle支持多种类型的约束,如主键(PRIMARY KEY)、外键(FOREIGN KEY)、唯一性(UNIQUE)、非空(NOT NULL)和检查(CHECK)等。 **添加约束**: ```sql ALTER TABLE 表名 ADD CONSTRAINT 约束名 约束类型 ...

    Oracle数据库经典教程

    以下是对"Oracle数据库经典教程"的部分内容的详细说明: **走进Oracle** Oracle数据库系统由Oracle公司开发,提供了数据存储、管理、备份和恢复等一系列功能。它的强大性能、高度可扩展性和安全性使得它成为许多...

    BBS.rar_oracle_oracle projects_oracle项目

    【描述】中的“简易的bbs论坛项目”说明这是一个基于Web的讨论平台,用户可以发布帖子、回复、浏览和搜索信息。这种系统通常包含用户管理、话题分类、帖子创建和交互等功能。数据库部分是其核心组件,负责存储用户...

    oracle tree图加说明

    在本案例中,我们将讨论如何在Oracle ADF中创建一个三级树形视图,以及如何通过图片和说明来辅助理解这一过程。 首先,我们需要在数据库层面建立层级关系。这里提到的"三级树"意味着我们会有三个相关联的表,每个表...

    Convert Oracle to Mysql

    - 表结构包括字段名、数据类型、主键、外键等,迁移时需确保在MySQL中重建相同的结构。 - Oracle的触发器、存储过程、视图等可能需要转换为MySQL的等效物。 7. **数据导出与导入**: - Oracle可以通过`expdp`或`...

    一个oracle客户端(oracle sql handler)

    ” 或 Ctrl+鼠标点击字串“[user.]objectName[@dbLink]”,如果是一表名,则能清楚地显示表的列信息(包括列名称、数据类型及长度、默认值、非空)、索引、约束条件(主键、唯一键、检查键、子表、触发器、外键、...

    Oracle课程综合性实验

    - 表的创建:实验要求建立至少三个数据表,需要理解SQL中的`CREATE TABLE`语法,以及如何设置主键和外键约束,确保数据完整性。 2. **JDBC(Java Database Connectivity)开发**: - 数据库连接:使用JDBC连接...

    Oracle数据库表结构导出工具Excel

    在这个Excel文件中,你可以看到每个表的名称、字段名、数据类型、长度、是否为主键、外键信息以及其他元数据。这使得用户可以方便地查看和编辑这些信息,或者将它们导入到其他数据处理工具中。 总结来说,"Oracle...

Global site tag (gtag.js) - Google Analytics