如何编辑表以启用 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”