首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有外键约束的SQL delete查询

问带有外键约束的SQL delete查询
EN

Stack Overflow用户
提问于 2012-10-12 19:56:26
回答 2查看 5.9K关注 0票数 4

我知道这个问题属于数据库理论的早期阶段,但我已经有几个月没有遇到过这样的问题了。如果有人有一个数据库,其中一些表与外键以“链”的形式关联在一起,并且他们想从一个包含一些“依赖”表的表中删除一条记录,那么会出现什么障碍呢?特别地,在包含表: Person、Profile、Preference、Filter的数据库中,存在这样的关联:Person.id在Profile中是外键,Profile.id在Preference中是外键,Filter.id在Preference中是外键,因此所有的关联enter code here都是OneToMany。是否可以通过一个简单的查询删除一个人:

代码语言:javascript
复制
Delete from Person p where p.id= 34;

如果不是,那么查询应该是什么样子才能成功执行删除?如果应用程序中的数据库是由hibernate管理的,我应该对每个实体的关联字段应用什么约束(annotations),才能使用上面的简单查询执行删除?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 20:08:40

对于SQL版本

​

​

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

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

代码语言:javascript
复制
No Action
Cascade
SET NULL
SET Default

请参考这篇文章。

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

ORACLE版本

你可以使用下面的其中一种。

alter table sample1添加外键(col1)引用示例(col2) on delete no操作;

alter table sample1 add foreign key (col1) references示例(col2) on delete restrict;

alter table sample1添加外键(col1)引用示例(col2) on delete cascade;

以供参考。

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

票数 2
EN

Stack Overflow用户

发布于 2012-10-12 19:58:41

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

即首先从Preference表中删除

然后从Profile and Filter表

然后从Person table中删除记录

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12858542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档