标签: cascading-deletes

如何在SQL Server中使用级联删除?

我有2个表:T1和T2,它们是带有数据的现有表.我们在T1和T2之间有一对多的关系.当删除T1中的记录时,如何更改表定义以在SQL Server中执行级联删除,T2中的所有关联记录也将被删除.

他们之间存在外来约束.我不想删除表或创建触发器来删除T2.例如,当我删除员工时,所有审核记录也应该消失.

T1 - 员工,

Employee ID      
Name
Status
Run Code Online (Sandbox Code Playgroud)

T2 - 性能评测,

Employee ID - 2009 Review
Employee ID - 2010 Review
Run Code Online (Sandbox Code Playgroud)

sql-server cascading-deletes

315
推荐指数
6
解决办法
57万
查看次数

在使用doctrine2删除级联时

我试图做一个简单的例子,以便学习如何从父表中删除一行,并使用Doctrine2自动删除子表中的匹配行.

这是我正在使用的两个实体:

Child.php:

<?php

namespace Acme\CascadeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="child")
 */
class Child {

    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    /**
     * @ORM\ManyToOne(targetEntity="Father", cascade={"remove"})
     *
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="father_id", referencedColumnName="id")
     * })
     *
     * @var father
     */
    private $father;
}
Run Code Online (Sandbox Code Playgroud)

Father.php

<?php
namespace Acme\CascadeBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="father")
 */
class Father
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
}
Run Code Online (Sandbox Code Playgroud)

这些表是在数据库上正确创建的,但是没有创建On Delete Cascade选项.我究竟做错了什么?

php cascading-deletes symfony doctrine-orm

218
推荐指数
2
解决办法
14万
查看次数

JPA 2.0 orphanRemoval = true删除Cascade时的VS.

我对JPA 2.0 orphanRemoval属性有点困惑.

当我使用JPA提供程序的数据库生成工具创建底层数据库DDL以获得ON DELETE CASCADE特定关系时,我想我可以看到它是必需的.

但是,如果数据库存在并且它已经存在ON DELETE CASCADE关系,那么这还不足以级联删除吗?什么是orphanRemoval除了做?

干杯

hibernate jpa cascade cascading-deletes jpa-2.0

172
推荐指数
7
解决办法
13万
查看次数

如何添加"删除级联"约束?

在PostgreSQL 8中,是否可以ON DELETE CASCADES在不丢弃后者的情况下添加到下表中的两个外键?

# \d scores
        Table "public.scores"
 Column  |         Type          | Modifiers
---------+-----------------------+-----------
 id      | character varying(32) |
 gid     | integer               |
 money   | integer               | not null
 quit    | boolean               |
 last_ip | inet                  |
Foreign-key constraints:
   "scores_gid_fkey" FOREIGN KEY (gid) REFERENCES games(gid)
   "scores_id_fkey" FOREIGN KEY (id) REFERENCES users(id)
Run Code Online (Sandbox Code Playgroud)

两个引用的表都在下面 - 这里:

# \d games
                                     Table "public.games"
  Column  |            Type             |                        Modifiers
----------+-----------------------------+----------------------------------------------------------
 gid      | integer                     | not null default nextval('games_gid_seq'::regclass)
 rounds   | integer                     | …
Run Code Online (Sandbox Code Playgroud)

postgresql cascade constraints cascading-deletes postgresql-8.4

153
推荐指数
3
解决办法
11万
查看次数

从DB中删除cascade和orphan有什么区别?

有什么区别

@OneToMany(cascade=REMOVE, mappedBy="customer")
public List<Order> getOrders() { ... }
Run Code Online (Sandbox Code Playgroud)

@OneToMany(mappedBy="customer", orphanRemoval="true")
public List<Order> getOrders() { ... }
Run Code Online (Sandbox Code Playgroud)

这个例子来自Java EE Tutorial,但我仍然不了解细节.

java jpa cascading-deletes

88
推荐指数
5
解决办法
7万
查看次数

CoreData + iCloud + Cascade删除 - 如何处理?

CoreDataCoreData使用级联删除规则,实体"A"与条目"B" 的集合具有一对多的关系.

iCloud环境中,当设备1显示"B"条目之一的详细视图时,设备2删除"A"条目.

NSPersistentStoreDidImportUbiquitousContentChangesNotification在设备1中接收到通知时,其App Delegate调用mergeChangesFromContextDidSaveNotification然后广播内部通知,该内部通知由视图控制器捕获,显示条目"B"的细节(代码使用performBlock它应该的位置).

但是,尽管当详细视图控制器接收到内部通知时,条目"A"确实无效,但条目"B"仍然作为有效CoreData对象存在.似乎Cascade规则尚未完成其运作.因此,设备1中的视图控制器不知道删除,这可能导致意外的结果.

mergeChangesFromContextDidSaveNotification 当基础数据已合并但Cascade规则尚未完成时,似乎过早地返回.

我在通知到达时尝试刷新条目"B",同时暂时将stalenessInterval托管对象上下文设置为零,因此不会使用缓存对象,但我仍然从商店获得有效条目"B".

此时检查null条目"A"不是一个选项,因为情况比我在此描述的情况稍微复杂一些,并且空条目"A"在某些情况下可能有效.

我尝试在合并更改之后和将内部通知发送到视图控制器之前引入延迟.我发现2秒延迟没有帮助,但延迟10秒有效.

但我不想依赖这种延迟.这是一个没有太多数据的测试环境,我不知道在生产环境中会发生什么.依靠实验性延迟似乎不是正确的做法.

有没有正确的事情?或者我开始做错了什么?

core-data cascading-deletes ios icloud

78
推荐指数
1
解决办法
1778
查看次数

在PostgreSQL中删除带有外键的行

我想删除包含外键的行,但是当我尝试这样的事情时:

DELETE FROM osoby WHERE id_osoby='1'
Run Code Online (Sandbox Code Playgroud)

我得到这个声明:

错误:表"osoby"上的更新或删除违反表"kontakty"上的外键约束"kontakty_ibfk_1"DETAIL:键(id_osoby)=(1)仍然从表"kontakty"引用.

如何删除这些行?

sql postgresql foreign-keys cascading-deletes

63
推荐指数
5
解决办法
10万
查看次数

Doctrine:cascade ="remove"vs orphanremoval = true

上面两个选项有什么区别?什么时候最好选择每个选项?

doctrine cascade cascading-deletes symfony

58
推荐指数
1
解决办法
2万
查看次数

覆盖Django的级联删除行为有哪些选择?

Django模型通常可以非常充分地处理ON DELETE CASCADE行为(以适用于本机不支持它的数据库的方式).

但是,我在努力发现在不适合的情况下覆盖此行为的最佳方法是什么,例如在以下场景中:

  • ON DELETE RESTRICT(即如果有子记录,则阻止删除对象)

  • ON DELETE SET NULL(即不删除子记录,但将其父键设置为NULL而不是断开关系)

  • 删除记录时更新其他相关数据(例如删除上传的图像文件)

以下是我所知道的实现这些目标的潜在方法:

  • 覆盖模型的delete()方法.虽然这种方法有效,但是当通过a删除记录时,它会被回避QuerySet.此外,delete()必须重写每个模型,以确保Django的代码永远不会被调用,super()并且无法调用,因为它可能使用a QuerySet来删除子对象.

  • 使用信号.这似乎是理想的,因为在直接删除模型或通过QuerySet删除时会调用它们.但是,不可能阻止删除子对象,因此无法实现ON CASCADE RESTRICT或SET NULL.

  • 使用正确处理此问题的数据库引擎(在这种情况下Django会做什么?)

  • 等到Django支持它(直到那时还有bug ...)

似乎第一种选择是唯一可行的选择,但它很难看,用洗澡水将婴儿扔出去,并且当添加新的模型/关系时可能会遗漏某些东西.

我错过了什么吗?有什么建议?

django django-signals cascading-deletes

57
推荐指数
3
解决办法
4万
查看次数

实体框架(EF)代码优先级联删除一对一或零关系

Julie LermanPluralsight"Entity Framework 5入门"课程的"Code First Modeling"部分之后,我创建了两个POCO类,其中包含一对一或零关系:父(User)和可选孩子(UserDetail).

User和UserDetail数据模型图(点击查看).

请注意,图中UserId属性是UserDetail的主键和外键.

相关代码:

public class User
{
    //...

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    /* Has a 1:0..1 relationship with UserDetail */
    public virtual UserDetail UserDetail { get; set; }

    //...
}

public class UserDetail
{
    //...

    /* Has a 0..1:1 relationship with User */
    public virtual User User { get; set; }

    [Key, ForeignKey("User")]
    public int UserId { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework cascading-deletes ef-code-first entity-framework-5

52
推荐指数
2
解决办法
10万
查看次数