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