Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带外键约束的SQL删除查询_Sql_Oracle_Hibernate - Fatal编程技术网

带外键约束的SQL删除查询

带外键约束的SQL删除查询,sql,oracle,hibernate,Sql,Oracle,Hibernate,我知道这个问题属于数据库理论的早期阶段,但几个月以来我从未遇到过这样的问题。如果有人有一个数据库,其中一些表作为外键的“链”关联在一起,他们想从一个有一些“依赖”表的表中删除一条记录,那么会出现什么障碍?特别是,在具有以下表格的数据库中:Person、Profile、Preference、Filter,存在的关联为Person.id是Profile中的外键,Profile是Preference中的外键,Filter.id是Preference中的外键,因此,所有关联在此处输入code都是OneT

我知道这个问题属于数据库理论的早期阶段,但几个月以来我从未遇到过这样的问题。如果有人有一个数据库,其中一些表作为外键的“链”关联在一起,他们想从一个有一些“依赖”表的表中删除一条记录,那么会出现什么障碍?特别是,在具有以下表格的数据库中:Person、Profile、Preference、Filter,存在的关联为
Person.id
Profile
中的外键,
Profile
Preference
中的外键,
Filter.id
Preference
中的外键,因此,所有关联
在此处输入code
都是
OneToMany
。是否可以通过简单的查询删除人员:

Delete from Person p where p.id= 34;
如果否,查询的外观应该如何才能成功执行删除?
如果应用程序中的数据库由hibernate管理,我应该对每个实体的关联字段应用哪些约束(
注释
),以便能够使用上述简单查询执行删除

答案是否如果存在外键约束,则必须首先删除叶节点表数据

这是第一次从
首选项
表中删除

然后从
配置文件和过滤器

然后从
人员表中删除记录

这是适用于SQL版本的任何地方的通用概念

看屏幕截图。您可以使用插入更新指定规则。因为它有删除和更新规则。您可以设置这些值中的任意一个

可以通过引用主键或唯一键来创建外键约束。外键约束确保关联表中数据的关系完整性。外键值可以为NULL,表示特定记录没有父记录。但如果存在一个值,则它在父表中绑定有一个关联的值。对父表应用更新或删除操作时,对子表中关联值的影响可能有不同的要求。SQL Server 2005和2008中有四个可用选项,如下所示:

No Action
Cascade
SET NULL
SET Default
请参考本文

ORACLE版本

您可以使用以下选项之一

更改表格样本1 添加外键(col1) 参考资料 样品(col2) 关于删除,不采取任何行动

更改表格样本1 添加外键(col1) 参考资料 样品(col2) 删除限制

更改表格样本1 添加外键(col1) 参考样品(col2) 删除级联

为了避免


如果配置文件和首选项表对PersonId记录具有外键约束,并且您试图从person表中删除person id,则会违反该约束。您需要在级联时删除或从应用约束的每个表中删除person id。此问题被标记为
Oracle
@Jodha-SQL标记代表该语言,而不是特定的RDBMS。