如何编辑表以启用 CASCADE DELETE?

Posted

技术标签:

【中文标题】如何编辑表以启用 CASCADE DELETE?【英文标题】:How do I edit a table in order to enable CASCADE DELETE? 【发布时间】:2010-12-15 21:03:45 【问题描述】:

我有一个代表用户的表格。当用户被删除时,我得到:

DELETE 语句与 REFERENCE 约束冲突

显然CASCADE DELETE在SQL Server中并没有我想象的那么简单,需要在表中添加选项。

问题是:我不知道如何添加CASCADE DELETE 选项。

我正在使用:SQL Server 2008。任何想法如何做到这一点?

【问题讨论】:

【参考方案1】:

首先阅读这篇 Microsoft 文章。 Read Me。我在设计过程中使用 GUI,所以这里是在 SSMS 中如何选择它的图片。 添加到外键的语法是“ON DELETE CASCADE”

【讨论】:

【参考方案2】:

这是我将“级联删除”功能添加到 SQL Server Management Studio 中的现有外键的方式。

首先,找到你的外键,并在一个新的查询窗口中打开它的“DROP and CREATE To”。

然后,只需将“ON DELETE CASCADE”添加到“ADD CONSTRAINT”命令:

然后只需点击“执行”按钮即可运行查询。

任务完成!

【讨论】:

【参考方案3】:

谷歌ALTER TABLE DROP CONSTRAINT,然后是ALTER TABLE ADD CONSTRAINT

ALTER TABLE

这是一个简单的例子:

CREATE TABLE A 
(
 ID INTEGER NOT NULL UNIQUE
);

CREATE TABLE B 
(
 ID INTEGER NOT NULL UNIQUE
    CONSTRAINT fk__B__A 
       REFERENCES A (ID)
);

-- Oops! Forgot the CASCADE referential actions.
-- DROP the constraint then recreate it:

ALTER TABLE B DROP
   CONSTRAINT fk__B__A;

ALTER TABLE B ADD
   CONSTRAINT fk__B__A
      FOREIGN KEY (ID)
      REFERENCES A (ID)
      ON DELETE CASCADE
      ON UPDATE CASCADE;

【讨论】:

我认为 RadiantHex 的意思是 RadiantHex 想要使用级联删除删除与约束关联的行,而不是删除约束,因此可以删除这些行。 @Mark Schultheiss:我认为 TA 先生的意思是 TA 先生建议约束不能更改(即没有 ALTER TABLE..ALTER CONSTRAINT 语法),而是必须删除约束然后重新创建。为了清楚起见,我添加了一个示例。

以上是关于如何编辑表以启用 CASCADE DELETE?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JPA 中获取外键引用以具有“ON UPDATE CASCADE ON DELETE CASCADE”功能?

如何在 laravel 8 中使用 Cascade Soft Delete Trait?

JPA + Hibernate:如何定义具有 ON DELETE CASCADE 的约束

如何在 ALTER TABLE 语句中添加“ON DELETE CASCADE”

如何实现关系表的级联删除(ON DELETE CASCADE的用法)

如何在 Lua 函数上应用元表以启用它们之间的自定义运算符?