这是我的表:(我正在使用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';
但是,它显示了发现完整性约束违反了子记录的错误
如何解决该问题? 谢谢!
答案 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;