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

时间:2019-04-03 12:16:40

标签: sql oracle foreign-keys constraints

这是我的表:(我正在使用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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

您可以在此处了解更多信息:Data Integrity

答案 2 :(得分:0)

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

ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;