当其他表中有外键时,如何删除表中的行

问题描述 投票:2回答:3

这是我的表:(我使用的是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';

但是,它显示了违反完整性约束的错误 - 找到的子记录

我该如何解决这个问题?谢谢!

sql oracle foreign-keys constraints
3个回答
1
投票

这取决于你想对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
投票

当您删除某个其他记录引用的记录时,您还必须对后者执行某些操作:删除记录或引用。您可以使用另一个删除语句手动执行此操作,但可能最好将此任务委托给Oracle。

如果要删除记录,请使用ON DELETE CASCADE选项提供约束。 如果您只想删除引用,请提供ON DELETE SET NULL选项。

你可以在这里阅读更多相关信息:Data Integrity


0
投票

如果您不想删除引用的记录:

ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;
© www.soinside.com 2019 - 2024. All rights reserved.