В этом учебном материале вы узнаете, как использовать foreign keys with cascade delete (внешний ключ с каскадным удалением) в Oracle/PLSQL с синтаксисом и примерами.
Что такое foreign keys with cascade delete?
Foreign keys with cascade delete означает, что если удаляется запись в родительской таблице, то соответствующие записи в дочерней таблице будут удалены автоматически. Это называется каскадное удаление в Oracle.
Foreign keys with cascade delete может быть определен либо в операторе CREATE TABLE или операторе ALTER TABLE.
Использование CREATE TABLE
Синтаксис
Синтаксис для создания Foreign keys with cascade delete с помощью оператора CREATE TABLE в Oracle/PLSQL:
(
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
);
Пример
Рассмотрим пример того, как создать foreign keys with cascade delete (внешний ключ с каскадным удалением) с помощью оператора CREATE TABLE в Oracle/PLSQL.
Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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 ); |
В этом примере мы создали primary key (первичный ключ) таблицы supplier под названием supplier_pk. Он состоит только из одного поля supplier_id. Затем мы создали foreign keys (внешний ключ) с названием fk_supplier в таблице products, который ссылается на таблицу supplier, на основании поля supplier_id.
Так, при каскадном удалении, когда удаляется запись в таблице supplier, также будут удалены все записи в таблице products, которые имеют одинаковое значение поля supplier_id.
Мы могли бы также создать foreign key (с каскадным удалением) с более чем одним полем, как в примере ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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 ); |
В этом примере, наш foreign key называется fk_foreign_comp ссылается на таблицу supplier на основе двух полей supplier_id и supplier_name.
Каскадное удаление по внешнему ключу с названием fk_foreign_comp вызовет все соответствующие записи в таблице products, которые будут каскадно удалены, когда удалится запись в таблице supplier, основанная на полях supplier_id и supplier_name.
Использование ALTER TABLE
Синтаксис
Синтаксис для создания foreign keys with cascade delete с помощью оператора ALTER TABLE в Oracle/PLSQL:
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE;
Пример
Рассмотрим пример того, как создать foreign keys with cascade delete с помощью оператора ALTER TABLE в Oracle/PLSQL.
Например:
1 2 3 4 5 |
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES supplier(supplier_id) ON DELETE CASCADE; |
В этом примере мы создали foreign keys (с каскадным удалением) под названием fk_supplier, который ссылается на таблицу supplier, основанную на поле supplier_id.
Мы могли бы также создать foreign keys (с каскадным удалением) с более чем одним полем, как в примере ниже:
1 2 3 4 5 |
ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id, supplier_name) REFERENCES supplier(supplier_id, supplier_name) ON DELETE CASCADE; |