Как удалить строки в таблице, когда в других таблицах есть внешние ключи - PullRequest
2 голосов
/ 03 апреля 2019

Вот мои таблицы: (я использую Oracle SQL)

FILM (Catalog_Num, Format, Title, Year, Number_Discs, Rating, Timing, Genre)
INVENTORY (Film_ID, Rental_Price, New, Date_In, Catalog_Num@, Store_Num@) 

Теперь я хочу удалить строки, которые год фильма за 2015, поэтому я написал:

delete from film 
where catalog_num in(
select catalog_num
from film join inventory using (catalog_num)
where year >'2015';

Однако, это показывает ошибку, что найдена запись нарушения целостности-дочернего элемента

Как я могу решить проблему? Спасибо!

Ответы [ 3 ]

1 голос
/ 03 апреля 2019

Это зависит от того, что вы хотите сделать с записью в вашей таблице inventory.

вы можете, например, изменить ограничение и добавить on delete cascade, чтобы запись была удалена с другой записью.

CONSTRAINT fk_column
     FOREIGN KEY (column1, column2, ... column_n)
     REFERENCES parent_table (column1, column2, ... column_n)
     ON DELETE CASCADE

или вы установите on delete set null, поэтому для fk будет установлено значение null

CONSTRAINT fk_column
     FOREIGN KEY (column1, column2, ... column_n)
     REFERENCES parent_table (column1, column2, ... column_n)
     ON DELETE SET NULL
0 голосов
/ 03 апреля 2019

Если вы не хотите удалять ссылки на записи:

ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;
0 голосов
/ 03 апреля 2019

Когда вы удаляете запись, на которую ссылается какая-либо другая запись, вы также должны что-то сделать с последней: либо удалить запись, либо ссылку.Вы можете сделать это вручную с помощью другого оператора удаления, но, вероятно, лучше поручить эту задачу Oracle.

Если вы хотите удалить запись, укажите ограничение с опцией ON DELETE CASCADE.
Если вы просто хотите удалить ссылку, укажите опцию ON DELETE SET NULL.

Вы можете прочитатьПодробнее об этом здесь: Целостность данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...