带有外键约束的SQL删除查询

时间:2012-10-12 11:56:26

标签: sql oracle hibernate

我知道这个问题属于数据库理论的早期阶段,但几个月后我才遇到这样的问题。如果某人有一个数据库,其中一些表关联在一起作为外键的“链”,并且他们想要从具有某些“依赖”表的表中删除记录,会出现什么障碍?特别是,在具有表的数据库中:Person,Profile,Preference,Filter存在关联,因为Person.idProfile中的外键,Profile.idPreference中的外键, Filter.idPreference中的外键,因此所有关联enter code here均为OneToMany。是否可以使用简单查询删除Person:

Delete from Person p where p.id= 34;

如果不是,为了成功执行删除,应该如何看待查询? 如果应用程序中的数据库由hibernate管理,那么我应该将哪些约束(annotations)应用于每个实体的关联字段,以便能够使用上述简单查询来执行删除?

2 个答案:

答案 0 :(得分:2)

FOR SQL VERSION

enter image description here

查看截图。您可以使用“插入更新规范”规则。因为它有删除和更新规则。您可以设置这些值中的任何一个。

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

No Action
Cascade
SET NULL
SET Default

将此文章用于参考。

http://www.mssqltips.com/sqlservertip/2365/sql-server-foreign-key-update-and-delete-rules/

ORACLE VERSION

你可以使用下面的一个。

alter table sample1    添加外键(col1) 引用    样本(col2) 删除没有动作;

alter table sample1 添加外键(col1) 引用    样本(col2) 关于删除限制;

alter table sample1 添加外键(col1)    参考样本(col2) 在删除级联;

for refrance。

http://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm

答案 1 :(得分:0)

如果有外键约束则回答“否”,则必须先删除叶节点表数据

首先从Preference表格中删除

然后从Profile and Filter

然后从Person table

删除记录

这是您在任何地方应用的通用概念