• Oracle 外键


    Oracle 外键

    外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性。

    Oracle 外键创建

    在Oracle数据库中,外键是强制实施参照完整性的一种方式,使用外键就意味着一个表中的值在另一个表中也必须出现。
     
    被引用的表称为父表,而带有外键的表称为子表。子表中的外键通常会引用父表中的主键。

    1、使用CREATE TABLE语句创建

    使用CREATE TABLE语句创建外键的语法是:
    CREATE TABLE table_name
    (
      column1 datatype null/not null,
      column2 datatype null/not null,
      ...
     
      CONSTRAINT fk_column
        FOREIGN KEY (column1, column2, ... column_n)
        REFERENCES parent_table (column1, column2, ... column_n)
    );
    示例:
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      CONSTRAINT fk_supplier
        FOREIGN KEY (supplier_id)
        REFERENCES supplier(supplier_id)
    );
     
    在这个例子中,我们在supplier表上创建了一个名为supplier_pk的主键。 它只包含一个字段 - supplier_id字段。 然后,在products表上创建了一个名为fk_supplier的外键,该表根据supplier_id字段引用supplier表。
     
    也可以创建一个具有多个字段的外键,如下例所示:
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      CONSTRAINT fk_supplier_comp
        FOREIGN KEY (supplier_id, supplier_name)
        REFERENCES supplier(supplier_id, supplier_name)
    );
    在这个例子中,外键称为fk_foreign_comp基于两个字段 - supplier_id和supplier_name字段引用供应商表。
     

    2、使用ALTER TABLE语句创建

    在ALTER TABLE语句中创建外键的语法是:
     
    ALTER TABLE table_name
    ADD CONSTRAINT constraint_name
       FOREIGN KEY (column1, column2, ... column_n)
       REFERENCES parent_table (column1, column2, ... column_n);
    示例:
     
    ALTER TABLE products
    ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id)
      REFERENCES supplier(supplier_id);
    在这个例子中,我们创建了一个名为fk_supplier的外键,它根据supplier_id字段引用supplier表的supplier_id字段。
     
    我们也可以创建一个具有多个字段的外键,如下例所示:
     
    ALTER TABLE products
    ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name);
     

    Oracle 级联删除外键

    所谓的级联删除是指当主表中的一条记录被删除,那么子表中所关联的记录也相应的自动删除。本教程将教大家如何在Oracle中使用级联删除外键。

    使用CREATE TABLE语句定义级联删除

    以下是使用CREATE TABLE语句定义级联删除的语法:
    CREATE TABLE table_name
    (
      column1 datatype null/not null,
      column2 datatype null/not null,
      ...
     
      CONSTRAINT fk_column
         FOREIGN KEY (column1, column2, ... column_n)
         REFERENCES parent_table (column1, column2, ... column_n)
         ON DELETE CASCADE
    );
    示例:
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      CONSTRAINT fk_supplier
        FOREIGN KEY (supplier_id)
        REFERENCES supplier(supplier_id)
        ON DELETE CASCADE
    );
     
    以上示例中,我们在supplier表创建了一个名为supplier_pk的主键,这个主键只包含supplier_id字段。
    然后在products表上创建了一个名为fk_supplier的外键,该表根据supplier_id字段引用supplier表的supplier_pk字段。
    由于级联删除,当supplier表中的记录被删除时,products表中相应的所有记录也将被删除,因为这些记录具有相同的supplier_id值。
    此外,我们也可以创建一个具有多个字段的外键(带级联删除),如下例所示:
     
     
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      CONSTRAINT fk_supplier_comp
        FOREIGN KEY (supplier_id, supplier_name)
        REFERENCES supplier(supplier_id, supplier_name)
        ON DELETE CASCADE
    );
     
    在这个例子中,fk_foreign_comp外键基于两个字段:supplier_id和supplier_name字段引用supplier表。
    根据supplier_id和supplier_name删除supplier表中的记录时,外键fk_foreign_comp上的级联删除会导致products表中的所有对应记录也会被级联删除。
     
     

    使用ALTER TABLE语句定义级联删除

    除了CREATE TABLE语句外,我们还可以用ALTER TABLE语句定义级联删除,具体语法如下:
     
    ALTER TABLE table_name
    ADD CONSTRAINT constraint_name
       FOREIGN KEY (column1, column2, ... column_n)
       REFERENCES parent_table (column1, column2, ... column_n)
       ON DELETE CASCADE;
    示例:
    ALTER TABLE products
    ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id)
      REFERENCES supplier(supplier_id)
      ON DELETE CASCADE;
     
    在本例中,我们创建了一个名为fk_supplier的外键(带级联删除),该外键基于supplier_id字段引用supplier表。
    此外,我们也可以创建一个具有多个字段的外键(带级联删除),如下例所示:
     
    ALTER TABLE products
    ADD CONSTRAINT fk_supplier
      FOREIGN KEY (supplier_id, supplier_name)
      REFERENCES supplier(supplier_id, supplier_name)
      ON DELETE CASCADE;

    Oracle 怎么删除外键

    在Oracle中,如何去删除自己创建的外键呢?本教程就为大家介绍Oracle中删除外键的方法。
    在Oracle中,我们可以使用ALTER TABLE语句来对外键进行删除。
    语法
    ALTER TABLE table_name
    DROP CONSTRAINT constraint_name;
    示例
    我们先使用下方的代码创建一个外键:
     
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      CONSTRAINT fk_supplier
        FOREIGN KEY (supplier_id)
        REFERENCES supplier(supplier_id)
    );
    通过以上代码,我们在supplier表上创建了一个名为supplier_pk的主键。然后再在products表上创建了一个名为fk_supplier的外键。
    如果我们想要删除这个新创建的外键,我们可以执行以下的代码:
     
    ALTER TABLE products
    DROP CONSTRAINT fk_supplier;
     
    这样,我们就成功的删除了这个新建的fk_supplier外键。

    Oracle 怎么禁用外键

    我们创建外键后,可能有时会遇到要禁用外键的情况,那么在Oracle中,我们如何对外键进行禁用呢?
    语法
    在Oracle中,我们要禁用外键可以使用以下语法:
    ALTER TABLE table_name
    DISABLE CONSTRAINT constraint_name;
     
    示例:
    我们先通过以下代码创建一个名为fk_supplier的外键:
     
    CREATE TABLE supplier
    ( supplier_id numeric(10) not null,
      supplier_name varchar2(50) not null,
      contact_name varchar2(50),
      CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
    );
     
    CREATE TABLE products
    ( product_id numeric(10) not null,
      supplier_id numeric(10) not null,
      CONSTRAINT fk_supplier
        FOREIGN KEY (supplier_id)
        REFERENCES supplier(supplier_id)
     
    在这个例子中,在supplier表上创建了一个名为supplier_pk的主键。 它只包含一个字段 - supplier_id字段。 然后,我们在products表上创建了一个名为fk_supplier的外键,products表的supplier_id字段引用supplier表的supplier_id字段。
     
    如果想禁用这个外键,可以执行以下命令:
     
    ALTER TABLE products
    DISABLE CONSTRAINT fk_supplier;
     

    Oracle 启用外键

    在Oracle中,面对已经被禁用的外键,我们该如何将它重新启用呢?本教程就为大家带来Oracle外键启用方法。
    外键启用语法
    ALTER TABLE table_name
    ENABLE CONSTRAINT constraint_name;
    示例:
     
    我们可以先创建一个名为fk_supplier的外键,
    然后对这个外键进行禁用,
    现在,我们将重新启用这个被禁用的fk_supplier外键,可以执行以下命令:
     
    ALTER TABLE products
    ENABLE CONSTRAINT fk_supplier;
    这样,原先被禁用的外链就被重新启用了,非常简单。
  • 相关阅读:
    python cook 整理
    Ajax
    跨站请求伪造 CSRF
    tornado web
    python hashable
    扩大了一个逻辑卷,resize2fs 保错:没有这个超级块
    linux重启后进入了救援模式,无法远程登录
    如何安装JDK以及配置win10的环境变量
    输出菱形
    6.28作业(2.使用3种方式求100以内偶数和)
  • 原文地址:https://www.cnblogs.com/wenyule/p/13083825.html
Copyright © 2020-2023  润新知